Spring Bean管理(注解方式)
2018-06-27 本文已影响26人
沧海一粟谦
使用注解定义Bean
- @Component 描述Spring框架中Bean
- @Repository 用于对DAO实现类进行标注
- @Service 用于对Service实现类进行标注
- @Controller 用于对Controller实现类进行标注
后面三个注解和@Component是等效的,是为了让标注类本身的用途清晰
举个栗子
除了引入spring的核心jar包,还要引入spring-aop
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
开启注解扫描(注意添加 context 约束)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描-->
<context:component-scan base-package="com.chen"/>
</beans>
/**
* Spring的Bean管理的注解方式:
* * 传统方式需要去XML中配置<bean id="" class=""></bean>
*/
@Component("userService")
public class UserService {
public String sayHello(String name){
return "Hello" + name;
}
}
测试
public class SpringTest{
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
String s = userService.sayHello("张三");
System.out.println(s);
}
Spring 的属性注入
- 使用@Autowired 进行自动注入,@Autowired 默认是按照类型注入(@Autowired注入时可以针对成员变量或者set方法)
- 使用@Autowired和@Qualifier指定注入Bean的名称(使用Qualifier 指定Bean名称后,注解Bean必须指定相同名称)
- 使用@Resource进行注入(相当于@Autowired和@Qualifier("userDao"))
@Repository("userDao")
public class UserDao {
public void save(){
System.out.println("DAO中保存用户...");
}
}
@Service("userService")
public class UserService {
/** 普通属性注入 ,有set方法的要注解在set方法上**/
@Value("梅西")
private String name;
/** 注入userDao **/
/* @Autowired
@Qualifier("userDao") */
@Resource(name="userDao")
private UserDao userDao;
public String sayHello(String name){
return "Hello" + name;
}
public void save(){
System.out.println("Service中保存用户...");
userDao.save();
}
}
@Test
public void test2(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();
}
输出:DAO中保存用户...
Service中保存用户...
其他注解
- Spring初始化bean:@PostConstruct
- 销毁bean时:@PreDestroy
- 指定Bean的作用范围:@Scope
默认作用范围是 singleton(单例),使用 @Scope("prototype") 为多例
XML与注解的整合开发
- 1、引入context命名空间
- 2、如果没有开启注解扫描的话,要在配置文件中添加 <context:annotation-config/> 标签,开启属性注入(@Resource、@Controller注解是不能用的)