• 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;

    参考资料

  • 相关阅读:
    单元测试的那点事儿
    centos 下载为firefox安装flash插件
    ubuntu lamp(apache+mysql+php) 环境搭建及相关扩展更新
    PHP源代码数组统计count分析
    fgetcsv函数的“陷阱”
    安装phpunit出现could not extract the package.xml file
    Centos Nginx + Svbversion配置安装
    双系统XP和ubuntu,升级ubuntu出现no such device grub rescue
    centos5 源码安装Nginx + mysql + apache + php
    再谈fgetcsv之在ubuntu10.10下不能解析中文的问题
  • 原文地址:https://www.cnblogs.com/linkworld/p/7718680.html
Copyright © 2020-2023  润新知