美文网首页
Spring--注解方式实现DI

Spring--注解方式实现DI

作者: aruba | 来源:发表于2022-05-18 16:10 被阅读0次

    上篇Spring--xml方式使用DI中,使用xml实现DI注入较为繁琐,后续的使用也都是注解方式

    一、xml其他配置

    在使用注解之前,还要了解一些内容

    1. 自动装配

    上次在xml引入bean时,需要使用ref属性指定bean的id,Spring还支持自动查找功能

    如:自动装配Job bean

        <bean id="job10" class="com.aruba.bean.Job" c:_0="1" c:jobName="salesman" c:jobDescription="sale"></bean>
        <!--   
        - byName 根据目标id值和属性值注入,要保证当前对象的属性值和目标对象的id值一致
        - byType 根据类型注入,要保证相同类型的目标对象在容器中只有一个实例
        -->
        <bean id="user10" class="com.aruba.bean.User" autowire="byType"></bean>
    

    使用autowire属性就可以自动引入bean了

    2. 引入外部属性配置文件

    在配置文件存放数据库连接信息:


    内容:

    jdbc_driver=com.mysql.cj.jdbc.Driver
    jdbc_url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    jdbc_username=root
    jdbc_password=root
    

    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:c="http://www.springframework.org/schema/c"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:util="http://www.springframework.org/schema/util"
           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/util
           http://www.springframework.org/schema/util/spring-util.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
    ">
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="username" value="${jdbc_username}"></property>
            <property name="password" value="${jdbc_password}"></property>
            <property name="url" value="${jdbc_url}"></property>
            <property name="driverClassName" value="${jdbc_driver}"></property>
        </bean>
        
    </beans>
    

    使用${key}即可获取配置文件中的信息

    二、注解方式创建对象

    xml中的bean标签,对应的注解为@Component,意思为组件,该注解细分了三个子注解:

    • @Controller:用于实例化controller层bean
    • @Service:用于实例化service层bean
    • @Repository:用于实例化持久层bean

    不清楚的情况,使用@Component

    1. 创建Emp类:
    @Component
    public class Emp {
    }
    
    2. Spring配置文件中开启包扫描
    <!--多个包可以使用,分割-->
    <context:component-scan base-package="com.aruba"/>
    
    3. 通过id获取实例对象

    id默认为类名的首字母小写
    也可以在@Component注解中指定id

        @org.junit.Test
        public void test1() {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    
            Emp emp = applicationContext.getBean("emp", Emp.class);
            System.out.println(emp);
        }
    

    三、注解方式注入对象属性

    注入对象有四个注解:

    • @Autowired: 根据属性数据类型自动装配
    • @Qualifier: 根据属性名称注入依赖
    • @Resources: 可以根据类型,也可以根据名称注入
    • @Value: 注入普通数据类型(8+String)

    多数情况使用@Autowired

    1. 定义Dao层

    接口:

    public interface EmpMapper {
        int addEmp();
    }
    

    实现类:

    @Repository
    public class EmpMapperImpl implements EmpMapper {
        @Override
        public int addEmp() {
            System.out.println("EmpMapperImpl addEmp");
            return 0;
        }
    }
    
    2. 定义Service层

    接口:

    public interface EmpService {
        void addEmp();
    }
    

    实现类:

    @Service
    public class EmpServiceImpl implements EmpService {
        @Autowired
        private EmpMapper empMapper;
    
        @Override
        public void addEmp() {
            System.out.println("EmpServiceImpl addEmp");
            empMapper.addEmp();
        }
    }
    

    自动注入Dao对象

    3. 获取Service对象
        @org.junit.Test
        public void test2() {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    
            EmpService empService = applicationContext.getBean("empServiceImpl", EmpService.class);
            empService.addEmp();
        }
    

    注解的基本使用就到此结束了,相比于xml简单方便很多

    项目地址:

    https://gitee.com/aruba/spring-study.git

    相关文章

      网友评论

          本文标题:Spring--注解方式实现DI

          本文链接:https://www.haomeiwen.com/subject/sdsaurtx.html