spring学习总结1
Posted byebyebird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring学习总结1相关的知识,希望对你有一定的参考价值。
博文参考链接:https://www.yiibai.com/spring/spring-auto-wiring-beans-with-autowired-annotation.html
//什么是spring
参考链接:https://blog.csdn.net/qq_22172133/article/details/81487134
spring 是一个开源框架,核心为 IOC(依赖注入/控制反转),AOP(面向切面)
这两个概念后面会详细介绍
//spring优点
1.方便解耦,对依赖对象的创建和管理交给spring容器
2.aop面向切面编程,对通用的异常,监控等进行统一的管理
3.声明式事务,方便事务管理
4.方便程序测试,Spring对Junit4支持,可以通过注解方便的测试Spring程序
spring IOC使用方法:
依赖注入与自动装配的区别:
依赖注入是为引用的对象进行赋值,自动装配是进行赋值时的一种方法
如:
public class Customer { private Person person; public Customer(Person person) { this.person = person; } public void setPerson(Person person) { this.person = person; } //... }
public class Person { //... }
<bean id="customer" class="com.yiibai.common.Customer" autowire="byName" />
<bean id="person" class="com.yiibai.common.Person" />
其中红色部分是一个依赖注入,Customer类引用了Person类,所以注入了person对象,自动装配模式为 byName,即为这个引用对象(person)赋值时采用的是按名称匹配的方法
依赖注入有两种:setter, 构造器
自动装配有五种:
- no – 缺省情况下,自动配置是通过“ref”属性手动设定
<bean id="customer" class="com.yiibai.common.Customer"> <property name="person" ref="person" /> </bean> <bean id="person" class="com.yiibai.common.Person" />
- byName – 根据属性名称自动装配。如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它。
-
<bean id="customer" class="com.yiibai.common.Customer" autowire="byName" /> <bean id="person" class="com.yiibai.common.Person" />
- byType – 按数据类型自动装配。如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它。
-
<bean id="customer" class="com.yiibai.common.Customer" autowire="byType" /> <bean id="person" class="com.yiibai.common.Person" />
- 如果有多个相同类型,装配时会报错,因为spring不知道应该注入哪个
-
<bean id="customer" class="com.yiibai.common.Customer" autowire="byType" /> <bean id="person" class="com.yiibai.common.Person" />
<bean id="student" class="com.yiibai.common.Person" />
- 标红部分为两个相同类型(Person)按类型注入会报错
- constructor – 在构造函数参数的byType方式。
-
<bean id="customer" class="com.yiibai.common.Customer" autowire="constructor" /> <bean id="person" class="com.yiibai.common.Person" />
- 按构造函数注入,实际上是根据构造函数中参数的类型进行匹配(因此,如果有多个类型相同的bean,注入时也会报错)
- autodetect – 如果找到默认的构造函数,使用“自动装配用构造”; 否则,使用“按类型自动装配”
- 参考链接:https://www.yiibai.com/spring/spring-autowiring-by-autodetect.html
以上为通过xml进行配置,下面介绍下通过注解配置
@Autowired
可以用于 setter方法,构造函数,属性字段
public class Customer {
@Autowired 用于属性字段 private Person person; /*@Autowired 用于构造函数 public Customer(Person person) { this.person = person; }*/ /*@Autowired 用于setter方法 public void setPerson(Person person) { this.person = person; }*/ //... }
public class Person { //... }
@Autowired注解是通过匹配数据类型自动装配Bean
想要使用@Autowired注解,有两种方法
1.xml引入如下配置
<beans //... xmlns:context="http://www.springframework.org/schema/context" //... http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> //... <context:annotation-config /> //... </beans>
2.xml中引入AutowiredAnnotationBeanPostProcessor
<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-2.5.xsd"> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> <bean id="CustomerBean" class="com.yiibai.common.Customer"> <property name="action" value="buy" /> <property name="type" value="1" /> </bean> <bean id="PersonBean" class="com.yiibai.common.Person"> <property name="name" value="yiibai" /> <property name="address" value="address ABC" /> <property name="age" value="29" /> </bean> </beans>
@Qualifier注解,当Autowired注入时有多个相同类型的bean,通过该注解可以指定要注入哪个bean
<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
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="CustomerBean" class="com.yiibai.common.Customer">
<property name="action" value="buy" />
<property name="type" value="1" />
</bean>
<bean id="PersonBean1" class="com.yiibai.common.Person">
<property name="name" value="yiibai-1" />
<property name="address" value="address-1" />
<property name="age" value="29" />
</bean>
<bean id="PersonBean2" class="com.yiibai.common.Person">
<property name="name" value="yiibai-2" />
<property name="address" value="address-2" />
<property name="age" value="28" />
</bean>
</beans>
public class Customer
{
@Autowired
@Qualifier("PersonBean1")
private Person person;
private int type;
private String action;
//getter and setter methods
}
以上是关于spring学习总结1的主要内容,如果未能解决你的问题,请参考以下文章