第六章 spring框架

目录

前言

6.1自动配置

6.1.1 什么是依赖自动装配?

6.1.2自动装配的方法

6.1.3环境搭配

步骤一:项目中添加BookDao、BookDaoImpl、BookService和BookServiceImpl类 

步骤二:resources下提供spring的配置文件 

 步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象

6.14 完成自动装配的配置

1,实现按照类型注入的配置

 6.2集合注入

6.2.1环境准备

 步骤一:项目中添加添加BookDao、BookDaoImpl类(记得提供setter方法)

 步骤二:resources下提供spring的配置文件,applicationContext.xml

 步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象

 6.2.2注入数据


前言

在上一章,我们学习了setter注入构造器注入,详细可以见前一章第五章 spring框架-CSDN博客

6.1自动配置

6.1.1 什么是依赖自动装配?

IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程成为自动转配

6.1.2自动装配的方法

1,按类型(常用)

2,按名称

3,按构造方法

4,不启动自动装配

6.1.3环境搭配

1,创建一个maven项目

2,pom.xml添加依赖

3,resources下添加spring的配置文件

这些不重要和前面一致,可以快速拷贝,最终结构如下:

步骤一:项目中添加BookDaoBookDaoImplBookServiceBookServiceImpl 

BookDao:

 

public interface BookDao {
    public void save();
}

 BookDaoImpl:

public class BookDaoImpl implements BookDao {
    private String databaseName;
    private int connectionNum;
    public void save() {
        System.out.println("BookDao save...");
    }
}

BookService:

 

 

public interface BookService {
    public void save();
}

BookServiceImpl:

 

 

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();
    }
}

步骤二:resources下提供spring的配置文件 

<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

 步骤三:编写App运行类,加载SpringIOC容器,并从中获取对应的bean对象

 

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

    }
}

6.14 完成自动装配的配置

自动装配只需要修改applicationContext.xml配置文件即可:

(1)将<property>标签删除

(2)<bean>标签中添加autowire属性

1,实现按照类型注入的配置

 <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
    <!--autowire属性:开启自动装配,通常使用按类型装配-->
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl" autowire="byType">

    </bean>

 注意事项:

1,需要注入属性的类中对应属性的setter方法不能省略

2,被注入的对象必须要被SpringIOC容器管理 

3,按照类型在SpringIOC容器中如果找到多个对象,会报NoUniqueBeanDefinitionException

一个类型在IOC中有多个对象,还想要注入成功,这个时候就需要按照名称注入,配置方式为:  

 

<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
    <!--autowire属性:开启自动装配,通常使用按类型装配-->
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl" autowire="byName">

    </bean>

 注意事项:

1,bookDao是private修饰的,外部类无法直接访问

2,外部类只能通过属性的set放啊进行访问

3,对外部类来说,setBookDao方法名,去掉set后首字母小写是其属性名

        这个规则是set方法生成的默认规则,set方法的生成是把属性名首字母大写前面加 set 形成的方法名

4,所以按照名称注入,其实是和对应的set方法有关,但是如果按照标准起名称,属性名和set对应的名是一致的

最后对于依赖注入,需要注意一些其他的配置特征:

1,自动装配用于引用类型依赖注入,不能对简单类型进行操作
2, 使用按类型装配时( byType )必须保障容器中相同类型的 bean 唯一,推荐使用
3, 使用按名称装配时(byName )必须保障容器中具有指定名称的 bean ,因变量名与配置耦合,不推荐使用

4,自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

 6.2集合注入

6.2.1环境准备

1,创建一个maven项目

2,pom.xml添加依赖

3,resources下添加spring的配置文件

这些不重要和前面一致,可以快速拷贝,最终结构如下:

 步骤一:项目中添加添加BookDaoBookDaoImpl类(记得提供setter方法)

BookDao:

public interface BookDao {
    public void save();
}

BookDaoImpl:

 

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 save() {
        System.out.println("BookDao 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);
    }
}

 步骤二:resources下提供spring的配置文件,applicationContext.xml

<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"></bean>

 步骤三:编写App运行类,加载SpringIOC容器,并从中获取对应的bean对象

 

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

    }
}

 6.2.2注入数据

    <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl">
        <!--注入数组类型数据-->
        <property name="array">
            <array>
                <value>10</value>
                <value>20</value>
                <value>30</value>
            </array>
        </property>
        <!--注入list类型数据-->
        <property name="list">
            <list>
                <value>ZhangSan</value>
                <value>LiSi</value>
                <value>WangWu</value>
                <value>ZhaoLiu</value>
            </list>
        </property>
        <!--注入set类型数据-->
        <property name="set">
            <set>
                <value>张三</value>
                <value>李四</value>
                <value>王五</value>
                <value>赵六</value>
            </set>
        </property>
        <!--注入map类型数据-->
        <property name="map">
            <map>
                <entry key="country" value="China"/>
                <entry key="province" value="JiangXi"/>
                <entry key="city" value="JiuJiang"/>
            </map>
        </property>
        <!--注入properties类型数据-->
        <property name="properties">
            <props>
                <prop key="国家">中国</prop>
                <prop key="省份">江西</prop>
                <prop key="城市">九江</prop>
            </props>
        </property>
    </bean>

运行结果

 说明:

1,property 标签表示 setter 方式注入,构造方式注入 constructor-arg 标签内部也可以写 <array>、 <list> <set> <map> <props> 标签
2,List 的底层也是通过数组实现的,所以 <list> <array> 标签是可以混用
3,集合中要添加引用类型,只需要把 <value> 标签改成 <ref> 标签,这种方式用的比较少
  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值