Spring--注解方式实现DI

2022-05-18  本文已影响0人  aruba

上篇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,意思为组件,该注解细分了三个子注解:

不清楚的情况,使用@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

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

上一篇下一篇

猜你喜欢

热点阅读