Spring 02 -Spring依赖注入+Spring注解开发

这篇具有很好参考价值的文章主要介绍了Spring 02 -Spring依赖注入+Spring注解开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 依赖注入(DI)

依赖注入:在Spring创建对象的同时,为其属性赋值,称之为依赖注入。

1.1 set方法注入

创建对象时,Spring工厂会通过Set方法为对象的属性赋值。

范例:定义一个Bean类型

public class User {
    private String name;
    private int age;
    private double money;
    private String hobby;
    private Date birthday;
    //省略set、get方法、构造方法
}

属性注入

<!-- 依赖注入:使用set方法进行注入 user.setName("") user.setBirthday(new Date())-->
<bean id="user" class="com.ying.pojo.User">
    <!--   简单类型注入(String+基本类型)     -->
    <property name="name" value="张三"/>
    <property name="age" value="10"/>
    <property name="hobby" value="打篮球"/>
    <property name="money" value="200.22"/>
    <!--   对象类型注入(String+基本类型)     -->
    <property name="birthday" ref="date"/>
</bean>
<bean id="date" class="java.util.Date">
    <property name="year" value="122"/>
</bean>

1.2 构造方法注入

范例:定义一个Bean类型 提供构造方法

public class User {
    private String name;
    private int age;
    private double money;
    private String hobby;
    private Date birthday;
    //省略set、get方法、构造方法
}

构造方法注入

<!-- 依赖注入:使用构造方法进行注入  User user = new User("cxk",30,3000,"打篮球",new Date())-->
<bean id="user1" class="com.ying.pojo.User">
    <!--  通过构造方法名注入       -->
    <!--        <constructor-arg name="name" value="李四"/>-->
    <!--        <constructor-arg name="age" value="20"/>-->
    <!--        <constructor-arg name="money" value="222.22"/>-->
    <!--        <constructor-arg name="hobby" value="跳"/>-->
    <!--        <constructor-arg name="birthday" ref="date"/>-->
    <!--  通过构造方法的参数类型注入      -->
    <!--        <constructor-arg type="java.lang.String" value="王五"/>-->
    <!--        <constructor-arg type="int" value="30"/>-->
    <!--        <constructor-arg type="double" value="333.33"/>-->
    <!--        <constructor-arg type="java.lang.String" value="唱"/>-->
    <!--        <constructor-arg type="java.util.Date" ref="date"/>-->
    <!--  通过构造方法的下标注入      -->
    <constructor-arg index="0" value="赵六"/>
    <constructor-arg index="1" value="60"/>
    <constructor-arg index="2" value="444.44"/>
    <constructor-arg index="3" value="rap"/>
    <constructor-arg index="4" ref="date"/>
</bean>

1.3 复杂类型注入

复杂类型指的是:list、set、map、array、properties等类型

定义复杂Bean类型

public class Person {
    private List<User> userList;
    private Map<String,String> map;
    private Set<String> set;
    private String[] arr;
    private Properties properties;
    //省略set、get方法、构造方法
}

给复杂类型注入属性值

<bean id="person" class="com.ying.pojo.Person">
    <property name="userList">
        <list>
            <bean class="com.ying.pojo.User"></bean>
            <bean class="com.ying.pojo.User"></bean>
            <bean class="com.ying.pojo.User"></bean>
        </list>
    </property>
    <property name="set">
        <set>
            <value>1</value>
            <value>2</value>
            <value>3</value>
        </set>
    </property>
    <property name="arr">
        <array>
            <value>a</value>
            <value>b</value>
            <value>c</value>
        </array>
    </property>
    <property name="map">
        <map>
            <entry key="k1" value="v1"></entry>
            <entry key="k2" value="v2"></entry>
            <entry key="k3" value="v3"></entry>
        </map>
    </property>
    <property name="properties">
        <props>
            <prop key="driver">com.mysql.jdbc.Dirver</prop>
            <prop key="url">jdbc:mysql:///java2101</prop>
        </props>
    </property>
</bean>

1.4 自定义类型的注入

范例:在UserServiceImpl中注入UserDaoImpl类型的属性

public class UserServiceImpl {
    private UserDaoImpl userDao;
    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

    public void addUser(){
        userDao.addUser();
    }
}

<!--  属性注入演示  -->
<!-- 创建UserDaoImpl对象    -->
<bean id="userDao" class="com.ying.dao.UserDaoImpl"></bean>
<!-- 创建UserServiceImpl对象    -->
<bean id="userService" class="com.ying.service.UserServiceImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

2 依赖注入案例


Spring整合DBUtils实现JDBC开发

EmpServiceImpl

public class EmpServiceImpl {
    private EmpDaoImpl empDao;

    public void setEmpDao(EmpDaoImpl empDao) {
        this.empDao = empDao;
    }

    public List<Emp> getAll(){
        try {
            return empDao.getAll();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

EmpDaoImpl

public class EmpDaoImpl {
    private QueryRunner queryRunner;

    public EmpDaoImpl(QueryRunner queryRunner) {
        this.queryRunner = queryRunner;
    }

    public List<Emp> getAll() throws SQLException {
        return queryRunner.query("select * from emp ",new BeanListHandler<Emp>(Emp.class));
    }
}

依赖注入配置

<!-- 使用Spring整合DBUtils工具类   -->
<!-- 创建EmpServiceImpl对象   -->
<bean id="empService" class="com.ying.service.EmpServiceImpl">
    <property name="empDao" ref="empDao"/>
</bean>
<!-- 创建EmpDaoImpl对象   -->
<bean id="empDao" class="com.ying.dao.EmpDaoImpl">
    <constructor-arg name="queryRunner" ref="queryRunner"></constructor-arg>
</bean>
<!-- 创建QueryRunner对象   -->
<bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
    <constructor-arg name="ds" ref="dataSource"/>
</bean>
<!-- 创建DruidDataSource对象   -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <!--   注入DruidDataSource连接池的配置信息     -->
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///java2101"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <!--        <property name="initialSize" value="40"/>-->
    <!--        <property name="maxActive" value="100"/>-->
    <!--        <property name="minIdle" value="20"/>-->
    <!--        <property name="maxWait" value="600000"/>-->
</bean>

测试

@Test
public void test05(){
    //创建Spring容器对象
    ApplicationContext ac =
        new ClassPathXmlApplicationContext("applicationContext.xml");
    EmpServiceImpl empService = ac.getBean("empService", EmpServiceImpl.class);
    List<Emp> empList = empService.getAll();
    empList.stream().forEach(System.out::println);
}

3 Spring注解开发

3.1 开启注解扫描

<!--  开启注解扫描  -->
<context:component-scan base-package="com.ying"/>

3.2 Component 注解

用于替换自建类型组件的 <bean…>标签;可以更快速的声明bean

@Component 注解的含义:创建类的对象,相当于xml中配置的bean标签

  • @Controller 针对于控制器层的类的注解
  • @Service 针对于业务层的类的注解
  • @Repository 针对持久层的类的注解 Dao数据访问层
@Component
//@Service("empService")
//@Controller("empService")
//@Repository("empService")
public class EmpServiceImpl implements EmpService{ 
}

3.3 Autowired注解 (开发常用 )

主要用于属性注入,Spring

  • @Autowired 自动装配:将对象属性自动进行注入(类型注入)

  • @Qualifier(“empDaoImpl1”) 限定要自动注入的bean的id,一般和@Autowired联用

注意:@Autowired先会按照类型注入,如果这个类有多个实例,那么再按照名称注入,如果有多个实例那么需要使用Qualifier进行指定

@Component
public class EmpServiceImpl implements EmpService{
    @Autowired
    @Qualifier("empDaoImpl1")
    //@Resource(name="empDaoImpl2")
    private EmpDao empDao;
    public void addEmp(){
        empDao.addEmp();
    }
}

3.4 Resource注解

主要用于属性注入,jdk

@Resource 自动装配:将对象属性自动进行注入(名称注入)

注意:默认按照名称进行装配,如果找到指定的名称则直接注入。如果没有找到,那么再按类型称注入,如果有多个实例那么需要使用name属性进行指定文章来源地址https://www.toymoban.com/news/detail-408342.html

@Component//@Controller   @Service  @Repository 
public class EmpServiceImpl implements EmpService{
    @Resource(name="empDaoImpl2")
    private EmpDao empDao;

    public void addEmp(){
        empDao.addEmp();
    }
}

到了这里,关于Spring 02 -Spring依赖注入+Spring注解开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发

    前两篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,以及详细讲解IOC,今天详细介绍一些DI(依赖注入) 能够配置setter方式注入属性值 能够配置构造方式注入属性值 能够理解什么是自动装配 思考:向一个类中传递数据的方式有几种?(给类

    2024年02月13日
    浏览(40)
  • quarkus依赖注入之三:用注解选择注入bean

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus依赖注入》系列的第三篇,前文咱们掌握了创建bean的几种方式,本篇趁热打铁,学习一个与创建bean有关的重要知识点:一个接口如果有多个实现类时,bean实例应该如何选择其中的一个

    2024年02月14日
    浏览(35)
  • DAY02_Spring—第三方资源配置管理&Spring容器&Spring注解开发&Spring整合Mybatis和Junit

    说明:以管理DataSource连接池对象为例讲解第三方资源配置管理 问题导入 配置数据库连接参数时,注入驱动类名是用driverClassName还是driver? 1.1 管理Druid连接池 数据库准备 【第一步】添加Druid连接池依赖 注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。 【第二

    2024年02月13日
    浏览(68)
  • DAY02_Spring第三方资源配置管理&Spring容器&Spring注解开发&Spring整合Mybatis和Junit

    说明:以管理DataSource连接池对象为例讲解第三方资源配置管理 问题导入 配置数据库连接参数时,注入驱动类名是用driverClassName还是driver? 1.1 管理Druid连接池 数据库准备 【第一步】添加Druid连接池依赖 注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。 【第二

    2024年02月14日
    浏览(42)
  • Spring IOC:详解【依赖注入数值问题 & 依赖注入方式】

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 spring版本:5.3.1 第一章:初识Spring:如何在Maven工程上搭建Spring框架? 第二章:Spring IOC:IOC在Spring底层中如何实现? 第三章:Spring IOC:详解【依赖注入数值问题 依赖注入

    2024年02月04日
    浏览(36)
  • Spring DI简介及依赖注入方式和依赖注入类型

    目录 一、什么是依赖注入 二、依赖注入方式 1. Setter注入 2. 构造方法注入 3. 自动注入  三、依赖注入类型 1. 注入bean类型 2. 注入基本数据类型 3. 注入List集合 4. 注入Set集合 5. 注入Map集合 6. 注入Properties对象 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列专栏文章

    2024年02月02日
    浏览(39)
  • spring——依赖注入原理及注入方式

    🟣1.依赖注入(Dependency Injection,DI) 是一种设计模式和编程技术,其原理是将对象的依赖关系由外部容器来管理和注入。它的目的是解耦组件之间的依赖关系,提高代码的灵活性、可维护性和可测试性。 🟣2.依赖注入的原理 是通过在对象的构造函数、属性或方法中注入所依

    2024年02月08日
    浏览(29)
  • Spring面试整理-Spring的依赖注入

    Spring框架的依赖注入(DI)是其核心功能之一,它允许对象定义它们依赖的其他对象,而不是自己创建或查找它们。这种机制促进了松耦合和更容易的测试。 依赖注入是一种设计模式,其中一个对象或方法提供另一个对象的依赖关系。在Spring中,这些依赖通常是服务、配置值

    2024年01月19日
    浏览(49)
  • Spring:泛型依赖注入

    泛型 :具有占位符(类型参数)的类、结构、接口和方法,通过 的方式定义了一个形式参数,在实例化时再指明具体类型 依赖注入 :IoC 的具体实现,指对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式 泛型依赖注入 :在进行依赖注入的同时,使用泛型

    2024年02月15日
    浏览(27)
  • Spring 依赖注入详解

    目录 1、基于构造器的依赖注入 2、基于 Setter 方法的依赖注入 3、使用构造器注入还是 setter 方法注入? 4、依赖注入解析的过程 5、依赖注入的相关示例 // 依赖关系,指的就是对象之间的相互协作关系         依赖注入(DI)是一个过程,在这个过程中,对象仅通过构造函

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包