注解实现对象的创建和注入
前言
XML配置实现对象的创建和注入见上一篇文章《Spring的IOC(控制反转)与DI(依赖注入) --XML配置》,这里主要讲述如何使用注解实现spring对对象的创建和注入
1、编写Service代码
@Service(value = "userService") //这个注解和Component没啥区别 只是语义化了 功能还是Component
//@Component(value = "userService") //这个注解的意思就是将当前类的对象 放到IOC容器中去
//默认情况下 这个类的对象放到IOC容器中的这个对象的名字就是当前类的名字的首写字母小写
// 后面的value是可以省略 省略的情况和上面是一样的 如果设置了值 那么这个类对象的名字 就是你设置的值
@Scope(scopeName = "singleton") //这个注解的作用就是设置 单例 和多例
@Lazy(value = false) //是否懒加载的问题
public class UserService {
// @Autowired //这个注解是先通过类型去IOC中找对象 对象没有 再通过名字 找 如果都没有找到 报错
@Resource //先通过名字找(IOC容器中找) 再通过类型找对象 如果都没有找到 报错
private IUserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
@PostConstruct //这个注解就是当一个对象放到IOC容器去的时候 要进行初始化操作
public void init(){
System.out.println("初始化操作");
}
public void print(){
userDAO.print();
}
@PreDestroy //对象要被销毁的时候要进行资源回收的操作 就使用这个
public void destory(){
System.out.println("destory");
}
}
2、编写DAO代码
//@Component
@Repository(value = "userDAOaaaaaaa") //这个功能还是Component的功能只是语义化了 在DAO层 一般情况下 就使用 @Repository这个注解
public class UserDAO implements IUserDAO{
public void print() {
System.out.println("DAO被执行了....");
}
}
3编写配置文件
<!--告诉咋们的Spring 需要扫描的包的路径
这里只需要告诉他 扫描那个包下面的注解就可以了
-->
<context:component-scan base-package="com.qf.spring.annotation"></context:component-scan>
4编写测试文件
public static void main(String[] args){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-base-di-annotation.xml");
context.start();
UserService userService = (UserService) context.getBean("userService");
userService.print();
context.close();
}
}