Spring--注解方式实现DI

上篇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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值