一:将程序来形成他们之间的依赖关系 ==> spring形成的依赖关系
1:更改过程
(1)原本的由程序形成的依赖关系如下图
(2)通过spring来形成他们的依赖关系如下图(getter和setter方法)
2:spring依赖的解析
(1):对spring形成依赖关系的解析(getter和setter方法)
(2):对spring形成依赖关系的解析(构造方法)
##
3:设置初值
(1)基本初值的依赖注入
spring形成依赖关系中 **设置初值 ** 的方法(getter和setter方法)
(2)数组或集合的依赖注入(选)
第一步:创建一个类
package com.spring;
import java.util.List;
public class Student {
private List<String> names;
public List<String> getNames() {
return names;
}
public void setNames(List<String> names) {
this.names = names;
}
@Override
public String toString() {
return "Student{" + "names=" + names + '}';
}
}
第二步:实现对数组(或集合)的注入
对数组的注入
<bean id="student" class="com.spring.Student">
<property name="names">
<list>
<value>student1</value>
<value>student2</value>
<value>student3</value>
</list>
</property>
</bean>
对集合的注入
<bean id="student" class="com.spring.Student">
<property name="names">
<array>
<value>student1</value>
<value>student2</value>
<value>student3</value>
</array>
</property>
</bean>
(3)Map依赖注入
第一步:创建一个类
package com.spring;
import java.util.Map;
public class Student {
Map<Integer, String> stuMap;
public Map<Integer, String> getStuMap() {
return stuMap;
}
public void setStuMap(Map<Integer, String> stuMap) {
this.stuMap = stuMap;
}
@Override
public String toString() {
return "Student{" + "stuMap=" + stuMap + '}';
}
}
第二步:实现对Map的注入
<?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="student" class="com.hnucm.spring.Student">
<property name="stuMap">
<map>
<entry>
<key>
<value>001</value>
</key>
<value>student1</value>
</entry>
<entry>
<key>
<value>002</value>
</key>
<value>student2</value>
</entry>
</map>
</property>
</bean>
</beans>
4:自动装配(自动注入)
起作用相当于自动填写了的内容,便于程序员的书写
自动注入分为两种,第一种是byName,第二种是byType
byName优先匹配名字相同的对象,而byType优先匹配类型相同的对象。
tip:自动装配的作用仅适用于对象类型,对于属性无效
5:Spring注解
(1)用注解替代spring注入
普通组件: @Component 标识一个受Spring IOC 容器管理的组件
持久化组件: @Repository 标识一个受Spring IOC 容器管理的持久化层组件
业务逻辑层组件: @Service 标识一个受Spring IOC 容器管理的业务逻辑层组件
表述层控制器组件:@Controller 标识一个受Spring IOC 容器管理的表述层控制器组件
!!以上的各个组件效果相同,只是名字不同,只是用来区分而已!!
上图中的@Controller作用:相当于在applicationContext.xml中写了
<bean class="com.spring.UserDao" id="userDao"></bean>
在添加注解之后,需要在applicationContext.xml添加扫描语句
<context:component-scan base-package="com.spring"/>
com.spring即为扫描的位置,该文件内的所有的文件都会被扫描,加了注解的就会产生效果
(2)注解的使用导致的自动装配的相关问题
由于使用注解的时候,没有等语句,就没有位置填写自动装配的语法,所以为自动装配也添加了相关的注解语句。
有两种自动注入注解:
@Autowired
1:实现自动注入;
2:优先采用byType,当byType无法匹配的时候就会转而采用byName进行匹配;
3:(当没有set和get的方法的时候)能够自动生成set和get方法。
@Resource
与@Autowired的功能几乎一样,但第二点会优先采用byName。