在com/resources/com/vtasters/beans.xml。用到spring-context包。
最简单的例子
beans.xml:<?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-3.0.xsd">
<bean id="video" class="com.vtasters.Video">
</bean>
</beans>
Main.java:
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("com/vtasters/beans.xml");
Video t = (Video) context.getBean("video");
}
}
注解:
Spring引入Java依赖注入标准后,使得beans.xml更简洁。Spring会扫描包里面的每个类,@Named就是注册bean,省去beans.xml的定义。beans.xml加入注解和扫描包:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
<context:component-scan base-package="com.vtasters" />
@Inject会自动注入实例,不用再手动产生,立刻可以使用(虽然为空)。
public class Video {
@Inject
private Customer customer;
}
@Named
public class Customer {}
ref:
Spring helloworld项目
如何加入beans.xml
注解扫描
其他讲解:
Spring主要用于Dependency Injection,它将实例的创建独立出来XML或config class。所以如果java代码没有contructor定义(特别时带参数的),就要到Beans.xml中找。下面重点解释Beans.xml中每个设置:
id
是整个服务的唯一标示(用户定义)Scope:
用于定义实例是否单例模式。值为singleton或prototype(每次产生新实例)HelloWorld.java:
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
Beans.xml:
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="singleton"/>
Main.xml:
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();
每次返回一个结果。
constructor-arg:
public class Foo {
public Foo(Bar bar, Baz baz) {}}
<bean id="foo" class="com.example.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
</bean>
<bean id="bar" class="com.example.Bar"/>
<bean id="baz" class="com.example.Baz"/>
这是自定义class。如果constructor是primitive类型:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="2001"/>
<constructor-arg type="java.lang.String" value="Zara"/>
</bean>
property:
用于指定类变量及其初值
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
<bean id="helloIndia" class="com.tutorialspoint.HelloIndia" parent="helloWorld"/>
如果父类是抽象类,加入abstract即可
<bean id="beanTeamplate" abstract="true"/>
public class TextEditor {
private SpellChecker spellChecker;
}
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<property name="spellChecker">
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker"/>
</property>
</bean>
<list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
</list>
</property>
private SpellChecker spellChecker;
@Autowired
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
public SpellChecker getSpellChecker( ) {
return spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
<!-- 这里就不需要constructor-arg -->
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
</bean>
@Autowired在constructor:
这样就不需要setter了
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
parent/abstract:
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld"/><bean id="helloIndia" class="com.tutorialspoint.HelloIndia" parent="helloWorld"/>
如果父类是抽象类,加入abstract即可
<bean id="beanTeamplate" abstract="true"/>
inner bean:
private SpellChecker spellChecker;
}
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<property name="spellChecker">
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker"/>
</property>
</bean>
Collection Injection:
<property name="addressList"><list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
</list>
</property>
Annotation Based Configuration
上述是以xml为基础的config,下面介绍以Annotation为基础,更为简洁和易读。@Autowired在setter:
public class TextEditor {private SpellChecker spellChecker;
@Autowired
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
public SpellChecker getSpellChecker( ) {
return spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
<!-- 这里就不需要constructor-arg -->
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
</bean>
No comments:
Post a Comment