spring注解 总结
2016-06-17 12:10
375 查看
要获得Spring的一个Bean ,可以通过在配置文件里进行配置Bean,Spring 2.5 以后提出了注解的方式同样也可以配置Bean,在企业项目中,往往使用两者相结合的方式。
下面总结下我所遇到的注解及其用法,方便日后查阅。
一、什么是注解
简单的理解就是 简化 我们的工作
如前面获得一个类UserService的Bean ,我们得在配置文件中配:<bean id="userService" class="com.bzc.www.service.UserService"></bean>
使用注解只需要在类UserService的上一行写一句 @Service("userService") 即可
二、要做哪些准备才能使用注解
在 一、什么是注解 里,我们可以很轻松的在UserService的上一行写一句 @Service("userService") ,但是仅仅这样写是不起作用的。你得让spring容器知道去哪里找到这些注解,只有spring容器认识这些注解并知道它们有什么用,这时候就需要做一些准备工作了。在applicationContext.xml文件里进行。
1)引入约束
1)引包:
spring-test-3.2.0.RELEASE.jar spring的测试包,整合junit4包
junit4.jar 点击工程右键--> build path --> add libararys --> 选择junit --> 选择junit4 --> finished
2)注解写法如下
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class) //必写
@ContextConfiguration(locations="classpath:applicationContext.xml") //必写
public class TestJunit {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Test //必写
public void demo1(){
userDao.addUser();
}
}其中有 三个注解是必须要写的。
第一个注解 @RunWith(SpringJUnit4ClassRunner.class) 是固定写法,整合junit4方便测试;
第二个注解 @ContextConfiguration(locations="classpath:applicationContext.xml") 加载配置文件,这里的classpath:表示src目录下,后面是我配置文件的名字;
第三个注解 @Test 是junit包单元测试必加的。
通过这种方式进行单元测试就会带来很多便利。
下面总结下我所遇到的注解及其用法,方便日后查阅。
一、什么是注解
简单的理解就是 简化 我们的工作
如前面获得一个类UserService的Bean ,我们得在配置文件中配:<bean id="userService" class="com.bzc.www.service.UserService"></bean>
使用注解只需要在类UserService的上一行写一句 @Service("userService") 即可
二、要做哪些准备才能使用注解
在 一、什么是注解 里,我们可以很轻松的在UserService的上一行写一句 @Service("userService") ,但是仅仅这样写是不起作用的。你得让spring容器知道去哪里找到这些注解,只有spring容器认识这些注解并知道它们有什么用,这时候就需要做一些准备工作了。在applicationContext.xml文件里进行。
1)引入约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd[/code]2)配置让spring容器去找到写了注解的包每次获得Bean都要写这两句就会造成大量重复代码,我们可以使用注解的方式来代替这句代码:<!-- spring去扫描这些包,才能找到哪些类使用了注解 --> <context:component-scan base-package="com.bzc.www"></context:component-scan>
三、我遇到的注解(遇到一个记录一个,学习一个)
1.对类进行的注解
1)@Component
这个注解是spring 2.5新特性里的对类注解的统称,也就是说所有的类都可以用这个注解进行配置Bean
2)@Controller 、@Service 、@Repository
这三个注解可以理解为作用和@Component相同,既然相同,为什么要引用呢?
在一个项目里,尤其是MVC的项目里,有表现层、业务层、数据连接层,如果每一层都有特定的类注解是不是会更新清晰呢。这三个Component的衍生注解就是这个作用
@Controller 表现层注解
@Service 业务层注解
@Repository 数据层注解
注:每个注解里可能有若干个value值,如Service注解里就有这个属性,完整的写应该是: @Service(value="userService"),但是我们约定俗称,这里的value值可以省略,直接写成@Service("userService")。这里的value值就相当于<bean id="userService" class="com.bzc.www.service.UserService"></bean>里面的id值,用于唯一标识。
2.对属性的注入
注:1.用注解的方式对属性的注入可以直接对属性写注解,也可以对属性对应的set方法写注解;
2.这里和配置文件对属性注入的区别是,直接对属性写注解时,可以不写它的set方法也能完成注入。@Service("userService") public class UserService { @Value("张三") private String name; @Autowired private UserDao userDao; @Override public String toString() { return "UserService [name=" + name + ", userDao=" + userDao + "]"; } }1)对简单类型的注解
这里的简单类型包括八种基本类型和String等包装类型
使用@Value("值")的方式进行属性的注入
2)对复杂类型的注解 @Autowired
这里的复杂类型值在一个类里引入另一个类的对象作为属性,比如这里的private UserDao userDao;
UserDao本身就是一个数据类型,这时候可以使用@Autowired进行注解,这里强调一下,@Autowired 是根据类型进行诸如的,所以后面不需要写value值,这里根据下方是UserDao 这个类型进行自动注解的。
3)@Qualifer("userDao")
@Qualifer("userDao") 这个注解和@Autowired 一样,区别是后者是依赖类型诸如,不用写value值,而前者是根据名称注入的,前者里的userDao是:@Repository("userDao") public class UserDao { }@Repository里的userDao
这个注解一般和@Autowired配合使用,如下:@Autowired @Qualifier("userDao") private UserDao userDao;4)Resource(name="userDao")
这个注解也是对复杂对象的使用,也是依赖名称注入属性的,简单的理解为Resource(name="userDao")和@Qualifer("userDao")是一样的。
在企业开发中,用到最多的应该是 2)的使用。3) 和4)需要认识,在见到的时候不至于懵逼即可。
3.注解初始化和销毁方法
前面说到,在Bean的生命周期里,有两个步骤,一个是在Bean被初始化的时候会执行的方法,另一个是Bean被销毁时执行的方法,当然销毁时需要关闭applicationContext对象。做到认识,会使用即可。@PostConstruct public void setup(){ //配置Bean初始化方法 } @PreDestroy public void destory(){ //配置Bean销毁时方法 }4.Bean的作用范围
@Scope 注解是个类注解,直接对类进行注解,默认情况下,也就是没有写@Scope时是单例模式创建Bean,如果现在需要使用多例模式创建Bean,只需要在类的上一行添加注解: @Scope("prototype") 即可。
5.spring3.0 注解新特性
上面说到的四个注解都是spring 2.5的注解特性,spring 3.0 又引入了几个新注解,JavaConfig思想:使用一个java类来代替配置文件对Bean进行配置。@Configuration public class JavaConfig { @Bean(name="userDao") public UserDao getUserDao(){ return new UserDao(); } @Bean(name="userService") public UserService getUserService(){ return new UserService(); } }当然了,第一步还是需要在配置文件applicationContext.xml里引入约束和扫描包配置,参照 : 二、要做哪些准备才能使用注解
这里有两个注解 :
@Configuration 这是个类注解器,告诉Spring 被这个注解的类就是一个工厂,这里的类型JavaConfig可以随意取。
@Bean(name="userDao") 这是个方法注解,等同于<bean id="userDao" class="com.bzc.www.service.UserDao"></bean>
6.测试用注解
前面在进行测试Bean的时候都要通过下面这句代码来获得,很长很烦。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1) applicationContext.getBean("userDao");
1)引包:
spring-test-3.2.0.RELEASE.jar spring的测试包,整合junit4包
junit4.jar 点击工程右键--> build path --> add libararys --> 选择junit --> 选择junit4 --> finished
2)注解写法如下
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class) //必写
@ContextConfiguration(locations="classpath:applicationContext.xml") //必写
public class TestJunit {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Test //必写
public void demo1(){
userDao.addUser();
}
}其中有 三个注解是必须要写的。
第一个注解 @RunWith(SpringJUnit4ClassRunner.class) 是固定写法,整合junit4方便测试;
第二个注解 @ContextConfiguration(locations="classpath:applicationContext.xml") 加载配置文件,这里的classpath:表示src目录下,后面是我配置文件的名字;
第三个注解 @Test 是junit包单元测试必加的。
通过这种方式进行单元测试就会带来很多便利。
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- springmvc 发送ajax出现中文乱码的解决方法汇总
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)