-
Component组件
之前用的用在类上的注解@Component用在什么位置都可以,不过spring也提供了相对MVC三层的衍生注解,效果是一样的只是便于理解。
* @Controller -- 作用在WEB层
* @Service -- 作用在业务层
* @Repository -- 作用在持久层
-
属性注入的注解
* 如果是注入的普通类型,可以使用value注解
* @Value -- 用于注入普通类型
* 如果注入的是对象类型,使用如下注解
* @Autowired -- 默认按类型进行自动装配
* 如果想按名称注入
* @Qualifier -- 强制使用名称注入
* @Resource -- 相当于@Autowired和@Qualifier一起使用
* 强调:Java提供的注解
* 属性使用name属性
代码如下
package demo;
import javax.annotation.Resource;
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.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)//整合junit需要的注解
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件的注解(一个测试类只需要加载一次即可)
public class IOCDemo {
//提供注入需要的成员变量,使用注解不必提供setter函数
@Resource(name="userService")//bean中注解的名字
private UserService us;
@Value(value="alex")//注入普通类型
private String name;
@Test
public void demo3() {
System.out.println(name);
}
/*
* 自动装配,找到该成员变量的实现类并自动注入,
* 如果有多个实现类就不能单独使用了,
* 需要加上@Qualifier来指定名称
*/
@Autowired
@Qualifier(value="userService")
private UserService us2;
@Test
public void demo4() {
us2.usDemo1();
}
/*
* #使用java自带的@Resource注解只需要提供name属性就可以和
* #@Autowired @Qualifier(value="userService")同样效果。
*/
@Resource(name="userService")
private UserService us3;
@Test
public void demo5() {
us3.usDemo1();
}
}
-
Bean的作用范围和生命周期的注解
更详细的可以参考 https://blog.youkuaiyun.com/elim168/article/details/75581612
1. Bean的作用范围注解
* 注解为@Scope(value="prototype"),作用在类上。值如下:
* singleton -- 单例,默认值
* prototype -- 多例
2. Bean的生命周期的配置
* 注解如下:
* @PostConstruct -- 相当于init-method
* @PreDestroy -- 相当于destroy-method