Spring 進階(8)使用註解配置bean(4)
阿新 • • 發佈:2018-12-10
- 新的一天哈,寫了個新的例子。
package interface_package; public interface Animal { public void Bigger(String name); }
package class_package; import interface_package.Animal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Dog implements Animal { private String name; private Mouse Cat; public Mouse getCat() { return Cat; } @Autowired public void setCat(Mouse cat) { Cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void Bigger(String name){ System.out.println("I am " + getName() + " bigger than " + getCat().getName() + ", hi~"); } }
package class_package; import interface_package.Animal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Cat implements Animal { private String name; private Mouse mouse1; public Mouse getMouse1() { return mouse1; } @Autowired public void setMouse1(Mouse mouse) { this.mouse1 = mouse; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void Bigger(String name){ System.out.println("I am " + getName() + " bigger than " + mouse1.getName() + ", hi~"); } }
package class_package; import interface_package.Animal; public class Mouse implements Animal { private String name; private Mouse mouse; public Mouse getMouse() { return mouse; } public void setMouse(Mouse mouse) { this.mouse = mouse; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void Bigger(String name){ System.out.println("I am " + getName() + ", hi~"); } }
測試類
package test_package; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { public static void main(String []args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); } }
<?xml version="1.0" encoding="GBK"?> <!--要使用註解的話,就要先引入對應的配置--> <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-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package=" class_package"/> </beans>
-
這裡寫的是spring5新加入的註解。
-
當標註使用自動裝配註解,而容器中沒有符合條件的bean的時候,Autowired的處理方式和aitowire=“ByType”不一樣,AutoWire會直接報錯,為了讓Autowire可以和aitowire=“ByType”一樣只是不執行任何步驟,可以將Autowire的引數required設定為fanse,當然,也可以使用spring5新加入的註解[email protected]
// 這裡,當將required設定為false的時候,如果spring找不到符合條件的時候,也不會報錯。 @Autowired(required = false) public void setCat(Mouse cat) { Cat = cat; }
在用IDEA做實驗的時候發現IDEA只有spring4的,所以我找了個5的在這。
package class_package; import interface_package.Animal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import org.springframework.beans.factory.annotation.Value; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; @Component public class Dog implements Animal { @Value("dog") private String name; private Cat Cat; public Cat getCat() { return Cat; } // 這裡,當將required設定為false的時候,如果spring找不到符合條件的時候,也不會報錯。 @Autowired(required = false) public void setCat(Cat cat) { Cat = cat; } @Override public void Bigger(String name){ System.out.println("I am " + name + " bigger than " + getCat().getName() + ", hi~"); } }
-