然後用spring tools裡的工具,我也不是很會用這個工具
選一個地方放xml,就選src吧,名稱大部人都會取applicationContext.xml
如果是 maven 或 gradle 就選 src\main\java 以下,我用 ..(上一層)還不行呢!
選需要的namespace,注意下面很有子選項,我是3.2版,所以我全部選3.2
但如果選的是第一個沒有版本的,表示任何版本都可用
如果沒選到,之後也可以選下方的活頁標籤的Namespaces來改
寫程式測試一下,建一個interface Paper,它被兩個子類繼承,Book和Comic
一樣有分兩種配置,XML和annotation
※XML配置
package book.vo; public class Book implements Paper { private String bookName; private int bookMoney; //setter/getter... @Override public String getInfo() { return "書名:" + this.bookName + ", 書錢:" + this.bookMoney; } }
而applicationContext.xml如下
<?xml version="1.0" encoding="UTF-8"?><bean class="book.vo.Book" id="book"> <!--方法一 --> <property name="bookName" value="Spring in Action" /> <!--方法二 --> <property name="bookMoney"> <value>500</value> </property> </bean>
※id和name都可以,差在哪後續章節再說
測試類為
public class Test { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Book book = (Book) ctx.getBean("book"); System.out.println(book.getInfo()); ((ClassPathXmlApplicationContext) ctx).close();結果為:
書名:Spring in Action, 書錢:500 漫畫書名:七龍珠, 漫畫書錢:65
※Annotation
Annotation配置又分成兩種,一種是Java配置,另一種就是Annotation配置
可以和XML配置互相使用
Java配置
@Configuration public class Book { @Value(value = "Spring in Action") private String bookName; @Value(value = "500") private int bookMoney; //setter/getter... @Bean public String getInfo() { return "書名:" + this.bookName + ", 書錢:" + this.bookMoney; } }
ApplicationContext ctx = new AnnotationConfigApplicationContext(Book.class); System.out.println(ctx.getBean("getInfo")); ((AnnotationConfigApplicationContext) ctx).close();
※@Bean 回傳什麼就用什麼接,如回傳一個自訂的 Book 類別,就可以點裡面的方法,只要回傳的物件裡面有值,那取出來就有值;此例回傳 String,所以可以直接印出來
※注意使用annotation時@Bean不能回傳void,否則會出「Error creating bean with name 'getInfo' defined in class book.vo.Book: Invalid factory method 'getInfo': needs to have a non-void return type!」的錯
※@Value可以寫在屬性或setter上面,但getter不行,和Hibernate一樣
※如果在 xml 設定檔想讀 annotation,那就要寫 context:component-scan
※如果想使用 @ComponentScan(basePackages = { "包路徑", "包路徑" }),那就只能抓annotation 的 bean,測試時就一定要使用 AnnotationConfigApplicationContext(Xxx.class),但要注意會包括子包的,如寫 xxx.ooo,那 xxx.ooo 以下的包也會掃的到,如果不想掃再加屬性 filter 即可
※如果annotation 想讀 xml 設定檔,那就要寫 @ImportResource("classpath:/applicationContext.xml")
※Annotation配置
開頭可以是@Component、@Controller、@Service、@Repository、@Named 其中之一@Component("book") public class Book { @Value(value = "Spring in Action") private String bookName; @Value(value = "500") private int bookMoney; // setter/getter... public String getInfo() { return "書名:" + this.bookName + ", 書錢:" + this.bookMoney; } }
※測試類和XML的一樣
沒有留言:
張貼留言