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,意思为组件,该注解细分了三个子注解:
- @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简单方便很多