Spring框架学习Day02(依赖注入)
Posted 龚喜发财+1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架学习Day02(依赖注入)相关的知识,希望对你有一定的参考价值。
一.IOC创建对象的方式
1.使用无参构造创建对象(默认)
2.假设使用有参构造函数创建对象
(1)参数下标赋值
<bean id="user" class="com.xu.pojo.User">
<constructor-arg index="0" value="xuan"></constructor-arg>
</bean>
(2)参数类型赋值(如果有多个变量类型相同,则会按照顺序进行赋值?)
<bean id="user" class="com.xu.pojo.User">
<constructor-arg type="java.lang.String" value="xuan"></constructor-arg>
</bean>
(3)直接通过参数名
<bean id="user" class="com.xu.pojo.User">
<constructor-arg name="name" value="xuun"></constructor-arg>
</bean>
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了,即在 ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);时对象已经被创建
二.Spring配置
1.别名alias<alias></alias>
2.Bean的配置
id:bean的唯一标识符,相当于对象名
class:对象所对应的全限定名:包名+类型
name:也是别名,name可以同时取多个别名name=“user1 user2,user3;user4”
3.import(一般用于团队开发使用,可以将多个配置文件,导入合并成为一个)
三.依赖注入
1.构造器注入
参考本章第一节 IOC创建对象的方式
2.set方式注入(重要)
(1)依赖:bean对象的创建依赖于容器
(2)注入:bean对象中的所有属性,由容器来注入
搭建环境
(1)复杂环境:
//Student类
private String name;
private Address address;
private String[] books;
private List<String> hobbies;
private Map<String,String> card;
private Set<String> games;
private String wife;
private Properties info;
//address类
private String address;
(2)applicationContext.xml
<bean id="address" class="com.xu.pojo.Address"></bean>
<bean id="student" class="com.xu.pojo.Student">
<!--第一种,普通值注入,value-->
<property name="name" value="hh"></property>
<!--第二种,bean注入,ref-->
<property name="address" ref="address"></property>
<!--数组注入 -->
<property name="books" >
<array>
<value>红楼梦</value>
<value>三国演义</value>
</array>
</property>
<!--list注入 -->
<property name="hobbies">
<list>
<value>reading</value>
<value>game</value>
</list>
</property>
<!--map注入 -->
<property name="card">
<map>
<entry key="idcard" value="121212"/>
<entry key="cre" value="24234"/>
</map>
</property>
<!--set注入 -->
<property name="games">
<set>
<value>wangzherongy</value>
<value>hepingjingy</value>
</set>
</property>
<!--null注入 -->
<property name="wife">
<null/>
</property>
<!--properties注入 -->
<property name="info">
<props>
<prop key="学号">67167</prop>
<prop key="sex">男</prop>
</props>
</property>
</bean>
(3)测试类Mytest
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Student student =(Student) context.getBean("student");
System.out.println(student.toString());
}
3.拓展方式注入
p命名空间:xmlns:p="http://www.springframework.org/schema/p"
可以直接注入属性的值:property
c命名空间:xmlns:c="http://www.springframework.org/schema/c"
,通过构造器注入:construct
4.Bean的作用域
(1)单例模式(Spring默认的机制)
<bean id='' '' scope="singleton">
(2)原型模式
每次从容器中get时,都会产生一个新对象
<bean id='' '' scope="prototype">
(3)其余的在web开发中应用
7.Bean的自动装配
- 自动装配是Spring满足Bean依赖的一种方式
- Spring会在上下文中自动寻找,并自动给bean装配
- 在Spring有三种自动装配方式
(1)xml显式装配
(2)java中显式装配
(3)隐式自动装配
7.1环境搭建
7.2Byname自动装配
(1)会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
(2)需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致
<bean id="people" class="com.xu.pojo.people" autowire="byName">
7.3ByType自动装配
(1)会自动在容器上下文中查找,和自己对象属性类型相同的bean
(2)需要保证所有bean的class唯一
<bean id="people" class="com.xu.pojo.people" autowire="byType">
7.4使用注解实现自动装配
(1)导入约束
(2)配置注解的支持
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解的支持-->
<context:annotation-config/>
</beans>
@Autowired
(1)可以在属性上使用,也可以在set方法上使用
(2)先按bytype查找,再按byname查找,再使用@qualifer(value=""),必须要求对象存在
@Resource
(1)先按byname查找,再按bytype查找,如果两个都找不到,就报错
(2)可以在属性上使用
以上是关于Spring框架学习Day02(依赖注入)的主要内容,如果未能解决你的问题,请参考以下文章
Spring框架学习教程,详解Spring注入bean的几种方式
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段