Fork me on GitHub

Spring 的IOC容器之注解的方式

1. 环境搭建

1.1 导入所需 jar 包

  • 引入 IOC 容器必须的6个jar包;
  • spring-aop-4.3.10.RELEASE.jar, Spring 框架的AOP的jar包;

1.2 创建对应的包结构,编写Java的类

  • UserService: 接口;
  • UserServiceImpl: 具体的实现类;

1.3 在src目录下,创建 applicationContext.xml 配置文件

// 此处引入的约束发生变化,需要引入 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.itheima.demo"/>

    <!-- 也可以采用如下配置, 表示扫描 com.itheima 包下所有的内容 -->
    <context:component-scan base-package="com.itheima"/>
</beans>

1.4 在具体的实现类上,添加注解

// 组件注解, 标记类
// <bean id="userService" class="com.itheima.demo.UserServiceImpl"/>
// value 表示该实现类的别名
@Component(value="userService")
public class UserServiceImpl implements UserService{
    public void sayHello(){
        System.out.println("hello world!");
    }
}

1.5 编写测试程序

public class Demo{
    public void fun(){

        // 创建工厂,加载配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 通过工厂获得对象
        // "userService" 对应注解中 value 的值
        UserService us = (UserService)ac.getBean("userService");
        us.sayHello();
    }
}

2. Spring 框架中 Bean 管理的常用注解

  1. @Component: 作用在类上;
  2. @Component的三个衍生注解,功能暂时是一致的:
    • @Controller: 作用在 Web 层;
    • @Service: 作用在业务层;
    • @Repository: 作用在持久层;
  3. 属性注入的注解
    • 使用注解进行依赖注入,可以不用提供set方法;
    • @Value用于注入普通类型;
    • @Autowired: 用于注入对象类型,默认按类型进行自动装配;
    • @Qualifier: 用于注入对象类型,强制使用名称注入;(与 @Autowired 一起使用)
    • @Resource: 相当于@Autowired@Qualifier一起使用;
// 示例
    public void UserServiceImpl{

        // 给 name 属性注入"张三"的字符串
        @Value(value="张三")
        private String name;

        // 从 IOC 容器中查找 UserDao 接口的实现类
        @Autowired
        private UserDao userDao;

        // 从 IOC 容器中查找 UserDao 的实现类且名称为 ud
        @Autowired
        @Qualifier(value="ud")   // 按名称注入
        private UserDao userDao;

        // 该注解是由Java 提供的,在 javax.annotation.Resource 包下, Spring 框架支持该注解
        @Resource(name="ud")
        private UserDao userDao;

        public void sayHello(){
            System.out.println("Hello world"+name);

            // 调用 userDao 实现类中的方法
            userDao.save();
        }    
    }

    @Repository(value="ud")
    public void UserDaoImpl{
        public void save(){
            System.out.println("保存用户..");
        }
    }

3. Bean 的作用范围和生命周期的注解

  1. Bean 的作用范围注解: @Scope(value="singleton")
    • singleton: 单例,默认值;
    • prototype: 多例;
  2. Bean 的生命周期注解(了解)
    • @PostConstruce: 相当于 init-method;
    • @PreDestory: 相当于 destroy-method;

参考资料

posted @ 2017-10-23 20:04  小a的软件思考  阅读(270)  评论(0编辑  收藏  举报