spring注解 总结

要获得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
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包单元测试必加的。

通过这种方式进行单元测试就会带来很多便利。







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值