1.spring 依赖注入 的几种方式:
1.1构造函数:
package com.tutorialspoint;
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor(SpellChecker spellChecker) {
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
<!-- Definition for textEditor bean -->
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<constructor-arg ref="spellChecker"/>
</bean>
<!-- Definition for spellChecker bean -->
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
1.2 set方式:
package com.tutorialspoint;
public class TextEditor {
private SpellChecker spellChecker;
// a setter method to inject the dependency.
public void setSpellChecker(SpellChecker spellChecker) {
System.out.println("Inside setSpellChecker." );
this.spellChecker = spellChecker;
}
// a getter method to return spellChecker
public SpellChecker getSpellChecker() {
return spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
package com.tutorialspoint;
public class SpellChecker {
public SpellChecker(){
System.out.println("Inside SpellChecker constructor." );
}
public void checkSpelling() {
System.out.println("Inside checkSpelling." );
}
}
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<property name="spellChecker" ref="spellChecker"/> </bean>
1.3内部bean(注意下):
<bean id="textEditor" class="com.tutorialspoint.TextEditor"> <property name="spellChecker"> <bean id="spellChecker" class="com.tutorialspoint.SpellChecker"/> </property> </bean>
2自动装配
2.1 byName :
通过set的方法 获取名字,然后在xml文件中添加 <bean id=" ---" class ="----" autowire="byName"></bean> 就可以了。
通过bean的id 和name
<bean id="textEditor" class="com.tutorialspoint.TextEditor" autowire="byName"> <property name="name" value="Generic Text Editor" /> </bean>
2.2 byType :
<bean id=" ---" class ="----" autowire="byType"></bean> 就可以了。
通过bean的class来确定。
2.3 通过构造函数自动装配:
<bean id="textEditor" class="com.tutorialspoint.TextEditor" autowire="constructor">
<constructor-arg value="Generic Text Editor"/> </bean>
3.基于注解:
首先,个人粗浅的认为,spring2.0新添的的注解功能让spring编码提高了一大截,而就目前来看注解功能的确牛逼且受欢迎。打call!
3.1 第一步:
<context:annotation-config/> <!-- bean definitions go here -->把这句话填上
3.2 注释 :
@Required 当注解在set方法中,但是没有在配置中解释的话,那么就会抛出异常。(用于检测有没有在xml文件中进行配置)
@Autwride 注解可以作用于变量上,(就免去了写set方法); 可以作用在构造函数上; 当然,也不用在配置文件的bean下面在声明了。
也可以作用在set方法上,值得注意的@Autowired 的 (required=false) ,即是变量没有传递参数也可以成功运行。
@Qualifier 注释
可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。(就是指定id);such as
@Autowired
@Qualifier("student1")
3.3 基于java的配置:
借助@Configuration(作用在类) 和 @Bean(作用在方法上 代替bean实例) 注解来代替xml配置.
还有其他的such as
@scope
@Bean(initMethod = "init", destroyMethod = "cleanup" )
4.spring 事物的传播行为
一共七种。分为两大类,保证在同一个事物中,和保证不再同一个事物中。
保证在同一个事物中:
支持当前事物,如果不存在就新建一个事物。
支持当前事物,如果不存在则抛出异常。
支持当前事物,如果不存在就以非事物执行。
保证不再同一个事物中:
如果当前存在事物,则挂起,执行新的事物。
如果当前存在事物,则挂起,以非事物执行。
如果当前存在事物,则抛出异常。
如果当前存在事物,则嵌套执行事物