• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Spring框架簡介⑥

    標簽: spring  java

    八 注解方式注入

    首先 引入注解依賴包

    鏈接:https://pan.baidu.com/s/1lyoSeLmkkFJurBF_4GFH4g 密碼:hyz8

    引入約束文件: 按照我給的頭信息即可配置文件信息

    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
        <!-- 要想使用注解, 必須開啟注解驅動
         -->
         <context:annotation-config/>
         
         <!-- 先配置兩個bean
          -->
          <bean id="userDao" class="com.rl.spring.dao.impl.UserDaoImpl"></bean>
          <bean id="userService" class="com.rl.spring.service.impl.UserServiceImpl"></bean>
    </beans>

    @Resource注解

    1 加在屬性上

    使用注解方式不需要使用set方法

    UserServiceImpl類

    package com.rl.spring.service.impl;
    
    import javax.annotation.Resource;
    
    import com.rl.spring.dao.UserDao;
    import com.rl.spring.service.UserService;
    
    public class UserServiceImpl implements UserService {
    
        @Resource
    	private UserDao userDao;
    	
        @Override
    	public void save() {
    		userDao.save();
    	}
    
    }
    

    測試代碼:

    package com.rl.spring.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.rl.spring.service.UserService;
    
    public class TestSpring {
    
    	@Test
    	public void test() {
    		ApplicationContext ctx =
    				new ClassPathXmlApplicationContext("ApplicationContext.xml");
    		UserService userService = (UserService) ctx.getBean("userService");
    		userService.save();
    	}
    }
    

    輸出:

    user被保存了

     

    2 加在set方法上

    當了id的userDao跟左邊的三個userDao都沒有一個匹配上時, 出按照類型來匹配

    @Resource注解還支持name屬性指定具體的id的名字, 一旦使用name屬性, 上圖方式就失效了, 直接根據name屬性指定的值來匹配, 無法匹配時則報錯

     

    @Autowired注解

    @Autowired有一個required屬性, 默認是true為必填

    1 加在屬性上:

    跟@Resource注解一樣的用法

    區別:

    @Autowired注解是直接按照類型進行匹配的, 一旦出現兩個同類型的, 則報錯, 解決方法是必須根據name來指定, 但是@Autowired注解并沒有name屬性, 只能結合@Qulifier注解的value屬性進行指定具體的id的名稱來實現注入

    package com.rl.spring.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    
    import com.rl.spring.dao.UserDao;
    import com.rl.spring.service.UserService;
    
    public class UserServiceImpl implements UserService {
    
        @Autowired
        @Qualifier(value="")
    	private UserDao userDao;
    	
        @Override
    	public void save() {
    		userDao.save();
    	}
    
    }
    

     

    2 加在set方法上:

    同@Resource注解的使用, 同時存在@Qulifier注解, 根據需要指定value屬性的值

     

    九 Spring掃描器來管理bean

    如果項目很大, 則可以使用注解掃描器來掃描帶有相應注解的類(層)

    @Controller @Repository @Component @Service

    @Controller: 控制層的類

    @Service: 服務層的類

    @Repository: dao層的類

    @Component: 普通層(無法分層的類)

    配置文件:

    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
        <!-- 配置注解掃描器, 掃描com.rl.spring包下和子包下的所有類
         -->
        <context:component-scan base-package="com.rl.spring"/>
    
        <!-- 如果使用了注解掃描器, 則注解驅動可以不用配置
         -->
         <!-- <context:annotation-config/> -->
         
    </beans>

    以上注解標識的類的id默認是類名的首字符小寫, 單也可以使用@Service注解中的value屬性來指定id名, 此時默認類名首字符小寫規則失效

    UserServiceImpl類

    package com.rl.spring.service.impl;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;
    
    import com.rl.spring.dao.UserDao;
    import com.rl.spring.service.UserService;
    @Service(value="aa")
    public class UserServiceImpl implements UserService {
    
    	@Autowired
    	@Qualifier(value="userDaoImpl")
    	private UserDao userDao;
    	
    
    	@Override
    	public void save() {
    		userDao.save();
    	}
    
    }
    

    其中的@Qualifier注解在dao實現類只有一個的情況下可以不使用

    測試代碼:

    package com.rl.spring.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.rl.spring.service.UserService;
    
    public class TestSpring {
    	
    	@Test
    	public void test2() {
    		ApplicationContext ctx =
    				new ClassPathXmlApplicationContext("ApplicationContext.xml");
    		UserService userService = (UserService) ctx.getBean("aa");
    		userService.save();
    	}
    }
    

    當Service層的value="aa"時, 測試代碼中的getBean則必須是aa, 如果沒有則按照取Service層的類名首字符小寫規則

     

    九 spring和junit的整合

    測試代碼的配置:

    package com.rl.spring.test;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.rl.spring.service.UserService;
    
    /**
     * @RunWith:指定spring對junit提供的一個運行器
     * @ContextConfiguration:指定spring配置文件位置
     */
    @RunWith(value=SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:ApplicationContext.xml"})
    public class TestSpring1 {
    
    	/**
    	 * 在junit的bean中注入UserService
    	 */
    	@Autowired
    	UserService userService;
    	
    	@Test
    	public void test2() {
    		userService.save();
    	}
    }
    

    其他配置和輸出不變

     

    版權聲明:本文為ip_JL原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/ip_JL/article/details/81480370

    智能推薦

    Spring框架學習_Spring簡介(02)

    這里寫自定義目錄標題 簡單了解框架 第一章 Spring 概述 # 1.1 Spring概述 # 1.2 Spring模塊 簡單了解框架 第一章 Spring 概述 # 1.1 Spring概述 1)Spring是一個開源框架 2)Spring為簡化企業級開發而生,使用Spring,JavaBean就可以實現很多以前要靠EJB才能實現的功能。同樣的功能,在EJB中要通過繁瑣的配置和復雜的代碼才能夠...

    Spring框架簡介以及環境搭建

    1.spring概述 Spring是一個開源框架,Spring是于2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為 J2E...

    安全框架(一)Spring Security 簡介

    安全框架: Spring Security+Shiro+OAuth2在一個項目里面 github地址: https://github.com/ZiCheng-Web/springboot-security 在 Java 開發領域常見安全框架有 Shiro 和Spring Security。 Shiro 是個一個輕量級的安全管理框架,提供了認證、授權、 會話管理、密碼管理、緩存管理等功能,。 Spr...

    Spring框架學習01:簡介和IoC

    一、Spring框架簡介 1.Spring歷史 2002,首次推出了spring框架的雛形,interface21框架! spring框架即以interface21框架為基礎,經過重新設計,并不斷豐富其內涵,于2003年3月24日發布了1.0正式版。 Rod Johnson,spring framework創始人,著名作者。很難想象Rod Johnson的學歷,真的讓好多人大吃一驚,他是悉尼大學的...

    Spring 框架簡介及簡單環境搭建

    Spring 框架簡介 概述 Spring 是最受歡迎的企業級 Java 應用程序開發框架 Spring 框架是一個開源的 Java 平臺,它最初是由 Rod Johnson 編寫的 Spring 是輕量級的框架 宗旨 不產生新技術,使原有的技術使用更加方便 核心 Ioc/DI:控制反轉/依賴注入 AOP:面向切面編程 聲明式事務 Spring Framework Runtime Test:Spr...

    猜你喜歡

    portlet_Spring Portlet MVC框架簡介

    本文是由三部分組成的文章系列的第一篇文章,“開發供在IBM WebSphere Portal中使用的Spring Portlet MVC Framework應用程序”。 這是一篇高級文章; 盡管不需要任何高級知識,但您應該熟悉開發JSR-168 Portlet的基礎知識,并且對Spring框架有基本的了解。 在過去的幾年中, Spring框架在J2EE開發人員中越來越受歡迎...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡