Spring注解注入
2019-02-14 本文已影响12人
往事随风_0817
Spring注解注入
Spring2.5引入注解方式去定义Bean
- @Component 描述Spring框架中的Bean
//首先在XML中加入context约束
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
//扫描包
<context:component-scan base-package="com.akwangl.dome"/>
//开启注解配置
<context:annotation-config/>
//java
@Component("userService")
public class UserService {
private String something;
@Autowired
private UserDao userDao;
public String sayHello(String name){
return "Hello" + name;
}
public void eat(){
System.out.println("eat:"+something);
}
public void save(){
System.out.println("Service中保存用户...");
userDao.save();
}
}
@Repository("userDao")
public class UserDao {
public void save(){
System.out.println("DAO中保存用户...");
}
}
除了@Component外,Spring提供了3个功能基本和@Component等效的注解
-
@Repository 用于对Dao实现类进行标注
-
@Service 用于对Service实现类进行标准
-
@Controller用于对Controller实现类进行标注
Spring属性注入-注解方式
-
使用@Autowired进行自动注入
-
@Autowired默认按照类型进行注入,如果存在两个相同Bean类型相同,则按照名称注入
-
@Autowired注入时可以加在成员变量或者set方法上
-
通过@Autowired的required属性,设置一定要找到匹配的Bean
@Repository("userDao")
public class UserDao {}
@Service("userService")
public class UserService {
@Autowired
private UserDao userDao;
}
- 使用@Qualifier找到指定name的Bena
@Service("userService")
public class UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
使用Qualifier指定Bean名称后,注解Bean必须指定相同名称
- @Resource相当于对@Autowiired和@Qualifier的一种封装
@Service("userService")
public class UserService {
@Resource(name="userDao")
private UserDao userDao;
}
Spring其他注解
- @PostConstruct 配置init方法,当一个Bean加载到Spring中就会执行这个初始化方法
- @PreDestroy 配置Destroy,当一个Bena从Spring销毁执行的方法(这个Bean作用域必须是scope=singleton才有效果)
@Component("bean1")
public class Bean1 {
@PostConstruct
public void init(){
System.out.println("initBean...");
}
public void say(){
System.out.println("say...");
}
@PreDestroy
public void destory(){
System.out.println("destoryBean...");
}
}
Bean的作用范围
使用XML方式配置Bena的作用范围与@注解方式,都会默认将作用范围设置为Singleton(单例)
- @Scoper注解用于指定Bean的作用范围
@Component("bean2")
@Scope("prototype")->这里的值可以设置为:singleton、prototype、request、session
public class Bean2 {
}