前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring--注解方式实现DI

Spring--注解方式实现DI

作者头像
aruba
发布2022-05-19 12:47:05
1680
发布2022-05-19 12:47:05
举报
文章被收录于专栏:android技术

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

一、xml其他配置

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

1. 自动装配

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

如:自动装配Job bean

代码语言:javascript
复制
    <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. 引入外部属性配置文件

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

内容:

代码语言:javascript
复制
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命名空间:

代码语言:javascript
复制
<?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类:
代码语言:javascript
复制
@Component
public class Emp {
}
2. Spring配置文件中开启包扫描
代码语言:javascript
复制
<!--多个包可以使用,分割-->
<context:component-scan base-package="com.aruba"/>
3. 通过id获取实例对象

id默认为类名的首字母小写

也可以在@Component注解中指定id

代码语言:javascript
复制
    @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层

接口:

代码语言:javascript
复制
public interface EmpMapper {
    int addEmp();
}

实现类:

代码语言:javascript
复制
@Repository
public class EmpMapperImpl implements EmpMapper {
    @Override
    public int addEmp() {
        System.out.println("EmpMapperImpl addEmp");
        return 0;
    }
}
2. 定义Service层

接口:

代码语言:javascript
复制
public interface EmpService {
    void addEmp();
}

实现类:

代码语言:javascript
复制
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Override
    public void addEmp() {
        System.out.println("EmpServiceImpl addEmp");
        empMapper.addEmp();
    }
}

自动注入Dao对象

3. 获取Service对象
代码语言:javascript
复制
    @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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、xml其他配置
    • 1. 自动装配
      • 2. 引入外部属性配置文件
      • 二、注解方式创建对象
        • 1. 创建Emp类:
          • 2. Spring配置文件中开启包扫描
            • 3. 通过id获取实例对象
            • 三、注解方式注入对象属性
              • 1. 定义Dao层
                • 2. 定义Service层
                  • 3. 获取Service对象
                  • 项目地址:
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档