spring入门——3种注入方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring入门——3种注入方式相关的知识,希望对你有一定的参考价值。

参考技术A 1. 创建 Test01 类,含一个基本数据类型的成员变量

2. 在 beans.xml 中配置

3. 测试类

针对自定义类型采用 ref 注入

创建一个 UserDao 类,String 类型的成员变量,并提供 get set 方法

3. 创建 UserService 类,创建一个成员变量 为 UserDao 类型,可以使用 set 或 构造注入

4. beans.xml 中配置注入

5. 测试

说明注入成功

在没有调用test01的情况下,也发生了注入,并创建了 test01对象

说明,只要加载了 bean.xml 核心配置文件,就会创建所有配置在文件中的 bean 对象   

6. 测试,是否所有的 bean 都是单例的

地址都一样,说明只要是来自于 spring 容器的 bean 对象,都是单例模式下创建的单例对象

只有一个对象,使用的都是同一个对象

1. Spring 容器管理的 bean 对象,必须提供无参构造,否则无法创建对象

2. 写一个 MenuService ,提供一个 String name 的属性

提供一个,有参构造函数,注意,不要写无参构造

3. 在核心配置文件中,配置这个 service 的bean 节点

4. 直接测试,发现报错

说明,没有无参构造时, spring 无法创建 MenuServcice 的 bean 对象

5. 所以,必须养成,给类提供一个无参构造的 习惯

6. 此时再测试,即可通过

感谢阅读全文。

未完。。。

Spring入门篇3 --- 依赖注入(DI)方式集合注入

目录

1.依赖注入方式

依赖注入(DI:dependence injection):在容器中建立bean与bean之间的依赖关系的整个过程。

向一个bean中传递数据有三种方法:setter注入、构造器注入自动装配

/src/main/java/com/itheima/dao/BookDao.java

package com.itheima.dao;

public interface BookDao 
    public void save();

/src/main/java/com/itheima/dao/impl/BookDaoImpl.java

package com.itheima.dao.impl;
import com.itheima.dao.BookDao;

public class BookDaoImpl implements BookDao 

    public void save() 
        System.out.println("book dao save...");
    

/src/main/java/com/itheima/service/BookService.java

package com.itheima.service;

public interface BookService 
    public void save();

/src/main/java/com/itheima/App.java

package com.itheima;
import com.itheima.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App
    public static void main(String[] args) 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookService bookService = (BookService) ctx.getBean("bookService");
        bookService.save();
    

①setter注入

/src/main/java/com/itheima/service/impl/BookServiceImpl.java

package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;

public class BookServiceImpl implements BookService 
    private BookDao bookDao;
    private int connectionNumber;

    // 在bean中定义引用类型属性并提供可访问的set方法
    public void setBookDao(BookDao bookDao) 
        this.bookDao = bookDao;
    

    // 在bean中定义简单类型属性并提供可访问的set方法
    public void setConnectionNumber(int connectionNumber) 
        this.connectionNumber = connectionNumber;
    

    public void save() 
        System.out.println("book service save ..." + connectionNumber);
        bookDao.save();
    

/src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" />
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <!--配置中使用property标签的ref属性注入引用类型对象-->
        <property name="bookDao" ref="bookDao" />
        <!--配置中使用property标签的value属性注入简单类型数据-->
        <property name="connectionNumber" value="10" />
    </bean>
</beans>

②构造器注入

/src/main/java/com/itheima/service/impl/BookServiceImpl.java

package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;

public class BookServiceImpl implements BookService 
    private BookDao bookDao;
    private int connectionNumber;

    public BookServiceImpl(BookDao bookDao, int connectionNumber) 
        this.bookDao = bookDao;
        this.connectionNumber = connectionNumber;
    

    public void save() 
        System.out.println("book service save ..." + connectionNumber);
        bookDao.save();
    

/src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" />
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="connectionNumber" value="10"/>
    </bean>
</beans>

测试结果

③自动装配

依赖自动装配:IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。

/src/main/java/com/itheima/service/impl/BookServiceImpl.java

package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;

public class BookServiceImpl implements BookService 
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) 
        this.bookDao = bookDao;
    

    public void save() 
        System.out.println("book service save ...");
        bookDao.save();
    

/src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" />
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
</beans>

2.集合注入

/src/main/java/com/itheima/dao/impl/BookDaoImpl.java

package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
import java.util.*;

public class BookDaoImpl implements BookDao 

    private int[] array;
    private List<String> list;
    private Set<String> set;
    private Map<String,String> map;
    private Properties properties;

    public void setArray(int[] array) 
        this.array = array;
    

    public void setList(List<String> list) 
        this.list = list;
    

    public void setSet(Set<String> set) 
        this.set = set;
    

    public void setMap(Map<String, String> map) 
        this.map = map;
    

    public void setProperties(Properties properties) 
        this.properties = properties;
    

    public void save() 
        System.out.println("book dao save ...");
        System.out.println("遍历数组:" + Arrays.toString(array));
        System.out.println("遍历List" + list);
        System.out.println("遍历Set" + set);
        System.out.println("遍历Map" + map);
        System.out.println("遍历Properties" + properties);
    

/src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--数组注入-->
        <property name="array">
            <array>
                <value>100</value>
                <value>200</value>
            </array>
        </property>
        <!--list集合注入-->
        <property name="list">
            <list>
                <value>itcast</value>
                <value>itheima</value>
            </list>
        </property>
        <!--set集合注入-->
        <property name="set">
            <set>
                <value>itcast</value>
                <value>itheima</value>
            </set>
        </property>
        <!--map集合注入-->
        <property name="map">
            <map>
                <entry key="country" value="china"/>
                <entry key="province" value="henan"/>
            </map>
        </property>
        <!--Properties注入-->
        <property name="properties">
            <props>
                <prop key="country">china</prop>
                <prop key="province">henan</prop>
            </props>
        </property>
    </bean>
</beans>

/src/main/java/com/itheima/App.java

package com.itheima;

import com.itheima.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 
    public static void main( String[] args ) 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
    

测试

以上是关于spring入门——3种注入方式的主要内容,如果未能解决你的问题,请参考以下文章

Spring入门篇3 --- 依赖注入(DI)方式集合注入

JAVA入门[3]—Spring依赖注入

Spring 从入门到精通系列 05——Spring 依赖注入的三种方式

spring入门篇-学习笔记

Spring入门到进阶 - Spring Bean管理 XML方式

Spring的IOC注解开发入门2