<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      Spring注解淺入淺出——不吹牛逼不裝逼

      前情提要

      上文書(shū)咱們說(shuō)了《Spring淺入淺出 <https://www.cnblogs.com/zyx110/p/11306998.html>
      》,對(duì)Spring的核心思想看過(guò)上篇的朋友應(yīng)該已經(jīng)掌握了,此篇用上篇鋪墊,引入注解,繼續(xù)深入學(xué)習(xí)。

      ?

      引入注解


      在Spring框架中,盡管使用XML配置文件可以很簡(jiǎn)單地裝配Bean,但如果應(yīng)用中有大量的Bean需要裝配,會(huì)導(dǎo)致XML配置文件過(guò)于龐大,不方便以后的升級(jí)與維護(hù),因此,推薦開(kāi)發(fā)者使用注解的方式去裝配Bean。

      ?

      注解詳解

      對(duì)注解不清楚的可以看我博客《注解 <https://www.cnblogs.com/zyx110/p/10728595.html>
      》?,其實(shí)注解就是一個(gè)類(lèi),在開(kāi)發(fā)中使用注解取代XML配置文件。

      1.?@Component?取代?<bean?class=""></bean>
      ? ? @Component("id的值")

      2.?web開(kāi)發(fā)中,提供3個(gè)@Component注解衍生注解(功能一樣)取代?<bean?class=""></bean>
      ????@Repository?:dao層
      ????@Service?:service層
      ????@Controller?:web層
      ????????注意:SpringMVC?中推薦使用注解哦!
      3.?依賴(lài)注入,給私有字段設(shè)置,也可以給setter方法設(shè)置
      ????普通值:@Value("")
      ????引用值:
      ????????方式1:按照【類(lèi)型】注入
      ????????????@Autowired
      ????????方式2:按照【類(lèi)型+名稱(chēng)】注入1
      ????????????@Autowired
      ????????????@Qualifier("名稱(chēng)")
      ????????方式3:按照【名稱(chēng)】注入2
      ????????????@Resource("名稱(chēng)")
      4.?生命周期
      ????@PostConstruct?:初始化
      ????@PreDestroy?:銷(xiāo)毀
      5.?作用域
      ????@Scope("prototype")?多例

      ?

      配置注解

      使用注解有了Bean的實(shí)現(xiàn)類(lèi),但現(xiàn)在Spring容器并不知道去哪里掃描Bean對(duì)象,需要在配置文件中配置注解。
      <?xml version="1.0" encoding="UTF-8"?> <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"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
      <!—使用context命名空間,通過(guò)Spring掃描指定包annotation及子包下所有Bean的實(shí)現(xiàn)類(lèi),進(jìn)行注釋解析-->
      <context:component-scan base-package="com.my"></context:component-scan> </beans>
        
      ?
      案例實(shí)踐

      一、Pom.xml
      <dependencies> <dependency> <groupId>junit</groupId>
      <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope>
      </dependency> <dependency> <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version>
      </dependency> <dependency> <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency>
      <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>
      <version>1.2</version> </dependency> <!--spring核心依賴(lài)--> <dependency>
      <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId>
      <version>5.1.5.RELEASE</version> </dependency> <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId> <version>5.1.5.RELEASE</version>
      </dependency> <dependency> <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId> <version>5.1.5.RELEASE</version>
      </dependency> </dependencies>
        

      ?

      ?

      二、spring-config.xml
      <?xml version="1.0" encoding="UTF-8"?> <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"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置注解要掃描的包-->
      <context:component-scan base-package="com.my"></context:component-scan> </beans>
        

      三、UserDao
      package com.my.dao; public interface UserDao { public void add(); public void
      delete(); public void update(); public void query(); }
        

      ?

      四、UserDaoImpl
      package com.my.dao.impl; import com.my.dao.UserDao; import
      org.springframework.stereotype.Repository; @Repository public class UserDaoImpl
      implements UserDao { @Override public void add() {
      System.out.println("UserDao中的添加功能實(shí)現(xiàn)了"); } @Override public void delete() {
      System.out.println("UserDao中的刪除功能實(shí)現(xiàn)了"); } @Override public void update() {
      System.out.println("UserDao中的修改功能實(shí)現(xiàn)了"); } @Override public void query() {
      System.out.println("UserDao中的查詢(xún)功能實(shí)現(xiàn)了"); } }
        

      ?

      五、UserService
      package com.my.service; public interface UserService { public void add();
      public void delete(); public void update(); public void query(); }
        

      ?

      六、UserServiceImpl
      package com.my.service.impl; import com.my.dao.UserDao; import
      com.my.dao.impl.UserDaoImpl; import com.my.service.UserService; import
      org.springframework.stereotype.Service; @Service public class UserServiceImpl
      implements UserService { private UserDao userDao = new UserDaoImpl(); @Override
      public void add() { userDao.add(); } @Override public void delete() {
      userDao.delete(); } @Override public void update() { userDao.update(); }
      @Override public void query() { userDao.query(); } }
        

      ?

      七、UserController
      package com.my.controller; import com.my.service.UserService; import
      org.springframework.beans.factory.annotation.Autowired; import
      org.springframework.stereotype.Component; import
      org.springframework.stereotype.Controller; import
      org.springframework.stereotype.Service; @Controller public class UserController
      { @Autowired private UserService userService; public void add(){
      userService.add(); } public void delete(){ userService.delete(); } public void
      update(){ userService.update(); } public void query(){ userService.query(); } }
        

      ?

      八、測(cè)試Test2
      package com.my.test; import com.my.controller.UserController; import
      org.springframework.context.ApplicationContext; import
      org.springframework.context.support.ClassPathXmlApplicationContext; public
      class Test2 { public static void main(String[] args) { ApplicationContext
      appCon = new ClassPathXmlApplicationContext("spring-config.xml");
      UserController userController = (UserController)
      appCon.getBean("userController"); userController.add();
      userController.delete(); userController.update(); userController.query(); } }
        

      ?

      ?

      九、測(cè)試結(jié)果

      ?

      ?

      ?

      ?

      結(jié)束總結(jié)

      看完此篇及上篇的朋友應(yīng)該掌握Bean的兩種常用裝配方式,即基于XML配置的裝配和基于注解的裝配,其中此篇基于注解的裝配方式尤其重要,它是當(dāng)前的主流裝配方式。

      ?

      ?

      ?

      ?

      ?

      ?


      *****************************************************************************************************

      我的博客園地址:https://www.cnblogs.com/zyx110/ <https://www.cnblogs.com/zyx110/>

      轉(zhuǎn)載請(qǐng)說(shuō)明出處


      我不能保證我所說(shuō)的都是對(duì)的,但我能保證每一篇都是用心去寫(xiě)的,我始終認(rèn)同“分享的越多,你的價(jià)值增值越大”,歡迎大家關(guān)注我的技術(shù)分享“Java匹馬行天下”和學(xué)習(xí)心得分享“匹馬行天下”,在分享中進(jìn)步,越努力越幸運(yùn),人生贏在轉(zhuǎn)折處,改變從現(xiàn)在開(kāi)始!

      支持我的朋友們記得點(diǎn)波推薦哦,您的肯定就是我前進(jìn)的動(dòng)力。

      ?

      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問(wèn)題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          亚洲图片视频小说 | 一边吃奶一边扎下边爽了动画开始播放 | 美女搞鸡网站 | 国产女人呻吟高潮抽搐声 | 靠逼视频网页观看 | 激情五月天开心网 | 激情婷婷亚洲 | 午夜免费网站 | 久久国产强奸 | 美女18隐私视频网站动漫 |