依赖注入
基于构造函数的依赖注入:
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
多个构造函数参数,可以以顺序、类型、显示指明:
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
</bean>
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="2001"/>
<constructor-arg type="java.lang.String" value="Zara"/>
</bean>
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="2001"/>
<constructor-arg index="1" value="Zara"/>
</bean>
基于设值函数的依赖注入:
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<property name="spellChecker" ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
注入内部 Beans:
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<property name="spellChecker">
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker"/>
</property>
</bean>
注入集合:
<!-- results in a setAddressList(java.util.List) call -->
<property name="addressList">
<list>
<value>INDIA</value>
<value>Pakistan</value>
<ref bean="address1"/>
<ref bean="address2"/>
</list>
</property>
<!-- results in a setAddressSet(java.util.Set) call -->
<property name="addressSet">
<set>
<value>INDIA</value>
<value>Pakistan</value>
<ref bean="address1"/>
<ref bean="address2"/>
</set>
</property>
<!-- results in a setAddressMap(java.util.Map) call -->
<property name="addressMap">
<map>
<entry key="1" value="INDIA"/>
<entry key="2" value="Pakistan"/>
<entry key ="two" value-ref="address1"/>
<entry key ="three" value-ref="address2"/>
</map>
</property>
<!-- results in a setAddressProp(java.util.Properties) call -->
<property name="addressProp">
<props>
<prop key="one">INDIA</prop>
<prop key="two">Pakistan</prop>
<prop key="three">USA</prop>
<prop key="four">USA</prop>
</props>
</property>
注入null:
<property name="email"><null/></property>
自动装配:
<bean id="textEditor" class="com.tutorialspoint.TextEditor"
autowire="byName/byType/constructor">
</bean>
基于注解的配置:
<context:annotation-config/>
@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中
@Required
public void setAge(Integer age) {
this.age = age;
}
Setter 方法中的 @Autowired
@Autowired
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
属性中的 @Autowired
@Autowired
private SpellChecker spellChecker;
构造函数中的 @Autowired
@Autowired
public TextEditor(SpellChecker spellChecker){
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
@Autowired 的(required=false)选项
@Autowired(required=false)
public void setAge(Integer age) {
this.age = age;
}
@Qualifier 注释,指定相同类型的 bean
@Autowired
@Qualifier("student1")
private Student student;
@PostConstruct 和 @PreDestroy 注释
@Resource 注释
@Resource(name= "spellChecker")
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
基于 Java 的配置:
@Configuration 注解表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。
@Bean 注解告诉 Spring,方法将返回一个对象。方法名称作为 bean 的 ID。
@import 注解允许从另一个配置类中加载 @Bean 定义。
使用 AnnotationConfigApplicationContext 来加载并把他们提供给 Spring 容器。
@Configuration
@Import(ConfigA.class)
public class BeanConfig {
@Bean(initMethod = "init", destroyMethod = "cleanup" )
@Scope("prototype")
public News news()
{
return new News();
}
}
----
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class);
News obj = ctx.getBean(News.class);
obj.setTitle("BeanConfig World!");
System.out.println(obj.getTitle());
监听上下文事件:
1、事件监听器
public class CStartEventHandler implements ApplicationListener<ContextStartedEvent> {
@Override
public void onApplicationEvent(ContextStartedEvent arg0) {
System.out.println("ctx start!");
}
}
----
2、配置事件监听器和发布者
<bean id="cStartEventHandler"
class="com.huawei.TestMavenProj.spring.CStartEventHandler"/>
<bean id="customEventHandler"
class="com.tutorialspoint.CustomEventHandler"/>
<bean id="customEventPublisher"
class="com.tutorialspoint.CustomEventPublisher"/>
----
3、触发事件
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
context.start();
…
context.stop();
----
1、自定义事件
public class CustomEvent extends ApplicationEvent {
public CustomEvent(Object source) {
super(source);
}
----
2、自定义事件发布者
public class CustomEventPublisher
implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
public void setApplicationEventPublisher
(ApplicationEventPublisher publisher){
this.publisher = publisher;
}
public void publish() {
CustomEvent ce = new CustomEvent(this);
publisher.publishEvent(ce);
}
}
----
3、触发事件
CustomEventPublisher cvp =
(CustomEventPublisher) context.getBean("customEventPublisher");
cvp.publish();

浙公网安备 33010602011771号