Spring 進階(5) 使用註解配置bean(1)
阿新 • • 發佈:2018-12-10
- 可以在為類配置註解,然後在配置檔案中指定哪一個包下有註解的類都註冊成java bean,spring沒有使用約定由於配置的做法,根據註解配置bean的類的路徑要顯式指定。
- 要特別指出的是,這些通過註解的bean,spring給他們的id是將類名全部改成小寫字母
- 天道酬勤,來吧
package InstanceClass; import org.springframework.stereotype.Component; //使用Component說明要spring把這個類當成普通的javabean註冊,其實還可以註冊成為其他的類的 @Component public class ClassA { private String name; void setName(String name) { this.name = "ok"; } public void thisIsMyName(){ System.out.println("A' s name is " + name); } }
package InstanceClass; import org.springframework.stereotype.Component; //同上 @Component public class ClassB { private String name; void setName(String name) { this.name = "ok1"; } public void thisIsMyName(){ System.out.println("B' s name is " + name); } }
package TestPackage; import InstanceClass.ClassA; import InstanceClass.ClassB; 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"); ClassA classA = applicationContext.getBean("classA", ClassA.class); System.out.println(classA.toString()); ClassB classB = applicationContext.getBean("classB", ClassB.class); System.out.println(classB.toString()); } }
<?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"> <!--顯式指定要在那個路徑下自動配置bean--> <context:component-scan base-package="InstanceClass"/> </beans>
-
然後介通過註解來指定bean的作用域(是每次產生一個例項呀,還是單例模式)
-
這就是為bean的實現類新增@scope註解,像這樣,在scope註解的引數就是指定它的作用域了。
@Scope("prototype") @Component("classA") public class ClassA { ...... }
-
-
是不是發現還差了一個很重要的地方?對!類成員變數的賦值,怎能少了這個呢?
-
實現方法是使用@Resource和@Value註解,@Resource註解的作用等同於在配置檔案中 使用ref,@value就是直接賦值啦,少俠看招!
-
首先是一個很大的坑,就是我的jdk裡沒有javax.Annotaion這個包,還得我自己去下載後新增進去,新增包操作以前說過啦,就是File->Project Structure-> + >選擇要的包,點選確定。我把我找到的包分享出來,居然有人拿這個賣五個c幣,過分。。。大家需要什麼包可以留言,我可以試試看幫你們找找,義務。javax.annotation jar
-
然後就是程式碼啦,在ClassA裡增加一個ClassB的成員變數,然後註解,需要特別指出的是,這兩個註解可以對set方法註解,也可以直接對值註解,當對值註解的時候,可以去掉set方法。
package InstanceClass; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import javax.annotation.*; import org.springframework.stereotype.Component; //使用Component說明要spring把這個類當成普通的javabean註冊,其實還可以註冊成為其他的類的 @Scope("prototype") @Component("classA") public class ClassA { @Value("classA") private String name; private ClassB classB; @Resource(name = "classB") public void setClassB(ClassB classB) { this.classB = classB; } public ClassB getClassB(){ return classB; } public void thisIsMyName(){ System.out.println("A' s name is " + name); } }
-
-
-
這是我看李剛編著的《輕量級javaEE企業應用實戰(第五版)-Struts2+Spring5+Hibernate5/JAP2》後總結出來的。