日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > springMVC學習(注解實現依賴注入)

springMVC學習(注解實現依賴注入)

來源:程序員人生   發布時間:2015-06-04 08:19:53 閱讀次數:3144次

          上1篇博客,學習了spring的依賴注入,即利用spring容器來為類中的屬性賦值,分為兩種賦值方法,利用set和利用構造方法,我們都知道,如果我需要為某1個屬性賦值的話,必須為該屬性寫上set方法,那末大家有無想過1個問題,如果我們1個類中有很多個屬性,我們會生成大量的set方法,如果用構造方法來賦值,即<constructor-arg index="" type="" ref="" value=""></constructor-arg>,這樣也會存在很多個這樣的標簽,由于1個<constructor-arg index="" type="" ref="" value=""></constructor-arg>只能為1個屬性賦值,為了解決這些困難,我們可以利用注解來為屬性進行賦值。

       一樣,我們新建兩個類ClassInfo.java和Teacher.java

package com.test.spring.di; public class ClassInfo { public void printClassInfo() { System.out.println("this is classInfo...."); } }
package com.test.spring.di; import javax.annotation.Resource; public class Teacher { private String teacherName; @Resource private ClassInfo classInfo; public void printClassInfo() { this.classInfo.printClassInfo(); } }
      注意,這里我們給需要被賦值的屬性上添加了@Resource的注解。其中包括了基本的String類型和ClassInfo的援用類型。接下來我們來寫1個applicationContext.xml文件:

注意:由于我們使用注解來為屬性賦值的,所以我們需要導入命名空間,以下:

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context⑵.5.xsd"

     其次需要導入依賴注入的注解解析器:

<context:annotation-config></context:annotation-config>

3.導入需要被spring容器來管理的類。

       經過上面漫步操作以后呢,applicationContext.xml是這個模樣:

<?xml version="1.0" encoding="UTF⑻"?> <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⑵.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context⑵.5.xsd "> <context:annotation-config></context:annotation-config> <bean id="classInfo" class="com.test.spring.di.ClassInfo"></bean> <bean id="teacher" class="com.test.spring.di.Teacher"></bean> </beans>
此時,編寫我們的測試類TestAnotation.java

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/test/spring/di/applicationContext.xml"); Teacher teacher = (Teacher) applicationContext.getBean("teacher"); teacher.printClassInfo();
此時打印以下:

this is classInfo....

這充分辯明了利用注解為Teacher類中的classInfo對象賦值成功了。在這里需要注意:如果我么你的@Resource的注解的值為"",那末spring將會將容器中id為該屬性的類注入給該屬性。甚么意思呢??我舉個栗子:

我將上面的@Resource的值修改成這樣:@Resource(name="test")此時由于name的值不是"",所以spring容器將不會試圖匹配與該屬性相同的id對應的類,而是將id為test的類注入給該屬性,但是,此時并沒有id為test的類,所以會拋出以下異常:

No bean named 'test' is defined

此時我將classInfo對應的id改成test,再次運行發現程序是ok的。

      其實spring有自己定義的注解的,仔細的程序員可能發現了@Resource是java官方提供的1個注解,其實不是spring的,我們可以將@Resource替換成@Autowired,這個@Autowired是根據類型進行匹配的。那我如果非要依照id來進行匹配怎樣辦呢?別急,spring為我們提供了1個@Qualifier,我們如果要匹配spring容器中id為classInfo的類,可以這樣寫:@Qualifier("classInfo"),注意:這里還需要加上@Autowired,以下:

@Autowired
@Qualifier("classInfo")
private ClassInfo classInfo;
        大家有無想過,既然spring是用來管理bean的,難道就沒有生命周期的管理???是有的。我們為ClassInfo類添加以下初始化和燒毀方法:

@PostConstruct public void init() { System.out.println("classInfo init...."); } @PreDestroy public void destroy() { System.out.println("classInfo destroy....."); }
顧名思義,@PostConstruct表示緊接著在構造方法以后履行的,@PreDestroy表示在燒毀前履行的,然后編寫測試代碼以下:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/test/spring/di/applicationContext.xml"); ClassPathXmlApplicationContext classContext = (ClassPathXmlApplicationContext) applicationContext; Teacher teacher = (Teacher) classContext.getBean("teacher"); teacher.printClassInfo(); classContext.close();
此時運行工程,會打印以下信息:

classInfo init....
this is classInfo....
classInfo destroy.....
我們發現確切履行了初始化和燒毀的方法,說明利用注解來實現聲明周期的管理也是可以的。

      但是,注意spring的注解只能用于援用類型。 

      那我能不能在applicationContext.xml中對bean的聲明也不寫呢??是可以的,怎樣做的,一樣分為以下3步:

1.導入命名空間:

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context⑵.5.xsd"

2.啟動掃描類的注解解析器

<context:annotation-config></context:annotation-config>
3.啟動依賴注入的注解解析器

<context:component-scan base-package="com.test.spring.di"></context:component-scan>

這里是掃描"com.test.spring.di"包和該包下的所有的類。

4.在需要被spring來管理的類上加上@Component的注解

注意:和@Resource比較相似,@Component是默許匹配類名的第1個字母小寫的,比如我在Teacher類上加了@Component這個注解,那末可以這樣得到該類對象:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/test/spring/di/applicationContext.xml");
Teacher teacher =  (Teacher) applicationContext.getBean("teacher");

如果Teacher類上寫了這樣1個@Component("teacherId"),那末此時就需要通過

Teacher teacher =  (Teacher) applicationContext.getBean("teacherId");

才可以得到Teacher對象。這里的@Component是1個比較寬泛的泛型,spring為我們提供了更詳細的注解配置:

@Controller  配置控制器的,控制視圖的跳轉  
@Service     配置service的,不是android中的service

@Repository    配置dao的,控制操作數據庫

     我們發現這3個注解是對web開發中的MVC編程很好的1個支持。

      恩,今天spring注解,就到這里吧,希望大家看了都能理解。

     源碼下載










生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕一区二区三区四区不卡 | 日本精品中文字幕 | 国产一区在线免费观看 | 欧美 日韩 国产 一区 | 久久免费少妇 | 久久国产精品亚洲 | 亚洲欧美在线播放 | 欧美精品一区二区久久 | 国产男女视频 | 成人区精品一区二区 | 美日韩中文字幕 | 高清欧美精品xxxxx在线看 | 国内成人在线 | 一区二区三区在线看 | 久久久久久久网站 | 91精品国产色综合久久不卡98口 | 欧美视频一 | 成人免费在线观看 | 精产国产伦理一二三区 | 日韩在线播放视频 | 麻豆av福利av久久av | 亚洲精品电影 | 一区二区三区在线免费观看 | 久久亚洲综合 | 久久久女女女女999久久 | 俄罗斯精品一区二区三区 | 亚洲精品久久久一区二区三区 | 最近中文字幕在线观看 | 国产成人8x视频一区二区 | 可以免费看av | 黄www在线观看 | 国产综合区 | 99久久精品免费看蜜桃的推荐词 | 一区二区三区不卡视频在线观看 | 麻豆国产在线 | 国产欧美精品一区二区 | 色九九九 | 午夜天堂 | 中国一级特黄毛片大片 | 最新av网站在线观看 | 91欧美一区二区三区成人 |