亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring IOC注解開發

2019-11-11 03:04:04
字體:
來源:轉載
供稿:網友

SPRing IOC注解開發

@(Spring)[Spring, ioc, 注解]

Spring IOC注解開發Spring的IOC的注解使用步驟創建項目引入jar包引入配置文件創建相關包和類將類的控制權交給Spring容器編寫測試依賴注入Spring的IOC注解的詳解Bean定義注解Bean依賴注入注解Bean的作用范圍的注解Bean的生命周期注解Spring的IOC的xml方式和注解方式比較XML和注解的比較contextcomponet-scan和contextannotation-config的區別

Spring的IOC的注解使用步驟

創建項目,引入jar包

這里寫圖片描述

引入配置文件

log4j.propertiesapplicationContext.xml 引入一個context的約束<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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"></beans>

創建相關包和類

創建接口package com.pc.service;/** * 用戶服務類接口 * * @author Switch * @data 2016年11月23日 * @version V1.0 */public interface UserService { /** * 保存用戶 */ public void save();}創建實現類package com.pc.service.impl;/** * 用戶服務實現類 * * @author Switch * @data 2016年11月23日 * @version V1.0 */public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用戶"); }}

將類的控制權交給Spring容器

在Spring中開啟IOC的注解<!-- 配置組件掃描 --><context:component-scan base-package="com.pc.service"/>在類上添加注解package com.pc.service.impl;import org.springframework.stereotype.Service;import com.pc.service.UserService;/** * 用戶服務實現類 * * @author Switch * @data 2016年11月23日 * @version V1.0 */@Service("userService")public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用戶"); }}

編寫測試

package com.pc.test;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** * SpringIOC注解測試 * * @author Switch * @data 2016年11月23日 * @version V1.0 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringIOCAnnotationTest { @Test public void test1() { }}

依賴注入

package com.pc.test;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.pc.service.UserService;/** * SpringIOC注解測試 * * @author Switch * @data 2016年11月23日 * @version V1.0 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringIOCAnnotationTest { @Resource(name = "userService") private UserService userService; @Test public void test1() { userService.save(); }}

如果屬性有set方法,注解需要加到set方法上,如果沒有set方法直接在屬性上添加注解。

PS:如果不知道怎么配置Spring和junit單元測試集成,可以參考之前寫的博客《Spring集成單元測試》

Spring的IOC注解的詳解

Bean定義注解

原來需要使用XML配置的方式將id和類綁定,現在不需要這樣做了只需要在類上添加注解即可。

@Component :組件 @Controller :修飾web層類@Service :修飾業務層類@Repository :修飾持久層類

@Component是Spring提供的通用的組件注解,可以通過在類上使用該注解,將對應的類標記為Spring Bean,使用此功能需要在Spring配置文件中,開啟組件掃描,<context:component-scan base-package="包名"/>。

@Component@Component("name")的區別在于,前者只能通過Spring的按類型注入依賴,后者還能使用按名注入依賴。

@Controller@Service@Repository這三個注解和@Component的功能在目前的4.x.x版本都是一樣的,只是表明它是一個組件。不過通過在不同層使用相對應的注解,可以使注解更具有意義。在以后的版本中,Spring可能提供對這三個注解不同的增強。

// 只能通過按類型注入// @Component// 可以按名注入@Service("userService")public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用戶"); }}

Bean依賴注入注解

如果屬性有set方法,注解需要加到set方法上,如果沒有set方法直接在屬性上添加注解。

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringIOCAnnotationTest { // @Value("Switch") private String name; @Value("Switch") public void setName(String name) { this.name = name; } @Test public void test2() { System.out.println(name); }}

PS:如果同時在屬性和set方法上添加了注解,那么set方法上的注解將會覆蓋屬性上的。

普通類型的屬性 @Value :注入普通類型屬性@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringIOCAnnotationTest { @Value("Switch") private String name; @Test public void test2() { System.out.println(name); }}對象類型的屬性 @Resource :注入對象類型@Autowired :注入對象類型,默認按照類型注入。結合@Qualifier注解完成按名稱的注入。 @Qualifier@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringIOCAnnotationTest { // 按bean類型注入 // @Resource // 按名注入,需要組件設置名稱 // @Resource(name = "userService") // 和上面功能一樣,按名注入 @Qualifier("userService") @Autowired private UserService userService; @Test public void test1() { userService.save(); }}

Bean的作用范圍的注解

Bean的范圍的注解:默認是單例的 @Scope :在類上添加的,控制類生成的時候采用單例還是多例。 取值: singleton :單例prototype :多例request :request域,需要在web環境session :session域,需要在web環境application: context域,需要在web環境globalsession 集群環境的session域,需要在web環境

PS:可以到WebApplicationContext接口和ConfigurableBeanFactory類中找到@Scope的取值。

Bean的生命周期注解

Bean的生命周期的注解 @PostConstruct :相當于init-method@PreDestroy :相當于destroy-method@Service("userService")public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用戶"); } @PostConstruct public void init() { System.out.println("用戶初始化"); } @PreDestroy public void destory() { System.out.println("注銷用戶"); }}

Spring的IOC的XML方式和注解方式比較

XML和注解的比較

這里寫圖片描述

context:componet-scan和context:annotation-config的區別

通過<context:annotation-config>的注釋可以看出它的作用是激活 @Required@Autowired、@PostConstruct、@PreDestroy、@Resource等注解。

通過<context:component-scan base-package="xx"/>的注釋可以看出它除了激活了<context:annotation-config>中所有的注解,同時還激活了@Component、@Repository、@Service@Controller、 @RestController@ControllerAdvice、@Configuration 這些注解。

附上不錯的關于 <context:component-scan>使用的博文, context:component-scan使用說明


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久av| 精品高清美女精品国产区| 一区二区三区精品99久久| 中文字幕亚洲色图| 91av国产在线| 国产成人av网| 久久久久久久一区二区| 亚洲欧美国产一区二区三区| 国产999精品久久久| 国产精品igao视频| 日韩国产高清视频在线| 2019最新中文字幕| 国产精品久久久久7777婷婷| 国产欧美日韩中文字幕在线| 中文字幕在线看视频国产欧美| 黑人与娇小精品av专区| xx视频.9999.com| 欧美精品日韩www.p站| 国产精品私拍pans大尺度在线| 成人a在线视频| 久久久91精品国产| 欧美一级片久久久久久久| 久久中国妇女中文字幕| 姬川优奈aav一区二区| 影音先锋日韩有码| 午夜精品蜜臀一区二区三区免费| 日韩av在线网| 亚洲欧美国产va在线影院| 国产精品永久免费在线| 国产一区二区免费| 亚洲福利在线观看| 日韩av在线导航| 国产精品视频最多的网站| 久久精品国产久精国产一老狼| 久久综合电影一区| 国产精品爽爽爽爽爽爽在线观看| 亚洲国产精品va在线看黑人| 在线观看日韩欧美| 黑人巨大精品欧美一区二区| 欧美成人精品一区二区| 久久久成人av| 乱亲女秽乱长久久久| 亚洲成人精品久久久| 国产精品入口免费视频一| 欧美激情亚洲国产| 亚洲精品永久免费精品| 国产不卡一区二区在线播放| 一区二区三区www| 亚洲网在线观看| 中日韩午夜理伦电影免费| 91精品久久久久久久久久久久久| 久久久999精品免费| 日本国产欧美一区二区三区| 57pao成人国产永久免费| 亚洲欧美日韩天堂| 萌白酱国产一区二区| 视频在线观看一区二区| 欧美专区在线播放| 欧美日韩国产中文精品字幕自在自线| 国产精品狠色婷| 国产精品欧美久久久| 国产视频丨精品|在线观看| 久久久久国产一区二区三区| 超在线视频97| 久久久久久伊人| 91精品在线影院| 亚洲精品v欧美精品v日韩精品| 丁香五六月婷婷久久激情| 色妞在线综合亚洲欧美| 97婷婷大伊香蕉精品视频| 欧美另类极品videosbest最新版本| 国产精品9999| 福利一区视频在线观看| 亚洲精品美女网站| 成人性教育视频在线观看| 97精品视频在线| 亚洲在线观看视频| 国产精品日本精品| 国产狼人综合免费视频| 欧美激情视频一区二区| 精品国内产的精品视频在线观看| 91香蕉电影院| 91国语精品自产拍在线观看性色| 91干在线观看| 亚洲第一av在线| 欧美精品日韩三级| 96sao精品视频在线观看| 久久人人爽人人爽人人片av高清| 国产精品av在线播放| 亚洲裸体xxxx| 45www国产精品网站| 欧美黑人性视频| 88xx成人精品| 日韩av电影中文字幕| 中文字幕亚洲综合久久| 欧美日韩精品在线播放| 欧美日韩在线观看视频小说| 久久久久久国产免费| 国产精品视频导航| 欧美一区二区三区四区在线| 亚洲综合中文字幕68页| 美女精品久久久| 亚洲国产精品国自产拍av秋霞| 伊人成人开心激情综合网| 国产丝袜一区视频在线观看| 97视频色精品| 成人欧美在线观看| 欧美视频在线观看免费网址| 精品日韩视频在线观看| 国产精品第二页| 国产精品欧美日韩一区二区| 欧美性猛交xxxx| 精品久久在线播放| 久久久久久久久久久久av| 欧美激情视频一区二区三区不卡| 亚洲精品日韩丝袜精品| 欧美伊久线香蕉线新在线| 欧美色图在线视频| 理论片在线不卡免费观看| 国产精品高精视频免费| 另类视频在线观看| 538国产精品一区二区免费视频| 欧美日韩国产精品专区| 中文字幕视频一区二区在线有码| 欧美色道久久88综合亚洲精品| 欧美久久精品午夜青青大伊人| 亚洲天堂久久av| 日韩高清电影免费观看完整| 中文字幕无线精品亚洲乱码一区| 日韩在线观看视频免费| 北条麻妃一区二区三区中文字幕| 日韩av黄色在线观看| 爽爽爽爽爽爽爽成人免费观看| 国产一区二区欧美日韩| 成人在线激情视频| 九九久久久久久久久激情| 国产99视频精品免视看7| 日韩欧美视频一区二区三区| 欧美激情在线观看视频| 欧美一区亚洲一区| 亚洲精品二三区| 国产欧美婷婷中文| 欧美电影第一页| 精品福利视频导航| 国产免费观看久久黄| 高清欧美性猛交| 欧美黑人一级爽快片淫片高清| 亚洲欧美一区二区三区四区| 高清欧美一区二区三区| 欧美一级淫片丝袜脚交| 久久香蕉精品香蕉| 国产精品久久久久99| 国产日韩中文字幕在线| 欧美日韩另类视频| 国产精品欧美一区二区三区奶水| 成人a视频在线观看| 亚洲电影av在线| 亚洲女同性videos| 国产精品视频大全| 欧美成人精品一区二区三区| 亚洲精品一区二区三区婷婷月| 亚洲区bt下载| 国产视频亚洲精品| 国产精品国语对白|