Spring依賴注入詳解
介紹:
分爲:
1.setter方法注入
2.使用構造器注入
3.使用Field注入(用於註解方式)
4.使用靜態工廠的方法注入
5.普通工廠類的方法注入
一、Setter方法注入:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<bean class="com.test.spring.Person">
<property name="name" value="LYW"/>
<property name="age" value="21"/>
</bean>
例如2:
public class Person {
private String name;
private int age;
private Type type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setType(Type type) {
this.type = type;
}
}
Type.Javapublic class Type {
private String typeName;
public void setTypeName(String typeName){
this.typeName= typeName;
}
}
以上這種情況 如何配置? <bean class="com.test.spring.Person">
<property name="name" value="LYW"/>
<property name="age" value="21"/>
<property name="type">
<bean class="com.test.spring.Type">
<property name="typeName" value="Coding"/>
</bean>
</property>
</bean>
2、或者採引入屬性的方法 :spring.xml
<bean class="com.test.spring.Type" id="type">
<property name="typeName" value="Coding"/>
</bean>
<bean class="com.test.spring.Person">
<property name="name" value="LYW"/>
<property name="age" value="21"/>
<property name="type" ref="type"> </property>
</bean>
上下兩種配置方式 建議使用下面這種 看起來 方便 不雜亂
二、構造器注入: 這種方式的注入是指帶有參數的構造函數注入
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
Spring.xml配置:<bean id="person" class="com.test.spring.Person
<constructor-arg name="name" value="LYW" />
<constructor-arg name="age" value="21" />
</bean>
這是簡單的構造注入三、註解注入
@Repository
public class UserDao {
public void sayHello(String name) {
System.out.println("Hello\t"+name);
}
}
UserService.java@Service
public class UserService {
@Autowired
private UserDao userDao;
public void sayHello(String name) {
this.userDao.sayHello(name);
}
}
spring.xml <context:annotation-config />
<context:component-scan base-package="com.lyw.*" >
</context:component-scan>
這樣就可以使用註解的方式注入四、靜態工廠注入
通俗點講,就是通過調用靜態工廠的方法來獲取自己需要的對象,爲了讓spring管理所有對象,我們不能直接通過"工程類.靜態方法()"來獲取對象,而是依然通過spring注入的形式獲取:
public interface Person(){
public void sayHello();
}
下面是接口的兩個實現類:
public class Work implements Person {
private String msg;
//依賴注入時必須的setter方法
public void setMsg(String msg){
this.msg = msg;
}
@Override
public void sayHello(){
System.out.println(msg + ",你好");
}
}
public class Teacher implements Person {
private String msg;
//依賴注入時必須的setter方法
public void setMsg(String msg){
this.msg = msg;
}
@Override
public void sayHello(){
System.out.println(msg + ",Hello");
}
}
下面的PersonFactory工廠中包含了一個getPerson的靜態方法,該方法將根據傳入的參數決定創建哪個對象。這是典型的靜態工廠設計模式。public class PersonFactory {
public static Animal getPerson(String type){
if ("work".equalsIgnoreCase(type)){
return new Work();
} else {
return new Teacher();
}
}
}
spring.xml配置<bean id="work" class="com.lyw.spring.PersonFactory" factory-method="getPerson">
<!-- 配置靜態工廠方法的參數 -->
<constructor-arg value="work" />
<!-- 通過setter注入的普通屬性 -->
<property name="msg" value="工人" />
</bean>
<bean id="teacher" class="com.lyw.spring.PersonFactory" factory-method="getPerson">
<constructor-arg value="teacher" />
<property name="msg" value="老師" />
</bean>
這樣就配置完了Spring了
五、普通工廠類的方法注入
public class PersonFactory {
public Person createPerson(){
Person person = new Person();
person.setName("LYW");
person.setAge(22);
return person;
}
}
spring.xml配置文件
<bean id="personFactory" class="com.lyw.spring.PersonFactory"></bean>
<bean id="person" factory-bean="personFactory" factory-method="createPerson"></bean>
這樣配置就可以了
作者:孩子你狠幼稚,真的很幼稚
出處:http://blog.csdn.net/lu1005287365/
如果,您認爲閱讀這篇博客讓您有些收穫,不妨點擊一下下面的贊【贊一下】
如果,您希望有什麼感覺不對的地方歡迎在下面評論【評一下】
如果,您對我的博客內容感興趣,請繼續關注我的後續博客,我是【LYW】
本文版權歸作者和CSDN共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。