Spring框架中Bean管理的常用注解
@Component:组件.(作用在类上)
Spring中提供@Component的三个衍生注解;(功能目前来讲是一致的)
- @Controller——作用在web层
- @Service—–作用在业务层
- @Repository—–作用在持久层
Dao层
public interface UserService {
public void sayHello();
}
/**
* UserDaoImpl交给IOC的容器
*/
//在持久层中,Component注解也可以用,但是最好使用每一层对应的注解
//@Component(value="userDao")
@Repository(value="ud")
public class UserDaoImpl implements UserDao {
public void save(){
System.out.println("保存客户。。。");
}
}
属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)
- 如果是注入的普通类型,可以使用value注解
- @value——用于注入普通类型
- 如果注入的是对象类型,使用如下注解
- @Autowired—-默认按类型进行自动装配
- 如果想按名称注入
- @Qualifier —-强行使用名称注入
- @Resource——相当于@Autowired和@Qualifier一起使用
- Resource是java的注解,Spring框架也支持该注解
- 使用name属性
/**
* 组件注解,标记类,
* <bean id="userService" calss="cn.zst.demo1.UserServiceImpl"></>
* 等价于@Component(value="userService")
*/
@Component(value="userService")
public class UserServiceImpl implements UserService {
//给name属性注入小王的字符串,setName方法可以省略不写
@Value(value="小王")
private String name;
/**
* //@Autowired 按照类型自动装配
* @Autowired
@Qualifier(value = "ud")//按名称注入,Qualifier和Autowired要配合使用
*/
//是java的注解,Spring框架支持该注解,去容器中按照name找
@Resource(name="ud")
private UserDao userDao;
public void sayHello(){
System.out.println("helloSpring"+name);
userDao.save();
}
}
Bean的作用范围和生命周期的注解
Bean的作用范围注解
- 注解为@Scope(value=”prototype”),作用在类上,值如下:
- singleton —-单例,默认值
- prototype—-多例
Bean的生命周期的配置
- 注解如下:
- @PostConstruct—-相当于init-method
- @PreDestory—-相当于destory-method
Spring 框架整合JUnit单元测试
- 为了简化了JUnit的测试,使用Spring框架也可以整合测试
- 具体步骤
- 要求:必须先有JUnit的环境(即导入JUnit的jar包)
- 步骤一:在程序中引入:spring-test.jar
- 步骤二:在具体的测试类上添加注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test1 {
//注入UserServiceImpl类的id
@Resource(name="userService")
private UserService us;
@Test
public void run1(){
//原来:获取工厂,加载配置文件,getBean
us.sayHello();
}
}