您的位置:首页 > 编程语言 > Java开发

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)引入约束

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容器去找到写了注解的包 
<!-- 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");
每次获得Bean都要写这两句就会造成大量重复代码,我们可以使用注解的方式来代替这句代码:
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包单元测试必加的。

通过这种方式进行单元测试就会带来很多便利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 注解