JAVAEE——spring02:使用註解配置spring、sts插件、junit整合測試和aop演示
一、使用註解配置spring1.步驟
1.1 導包4+2+spring-aop
4代表:
2代表:
日誌包:com.springsource.org.apache.commons.logging-1.1.1.jar
可選:com.springsource.org.apache.log4j-1.2.15.jar(老版本要導入的,導入可以保證一定能運行)
1.2 為主配置文件引入新的命名空間(約束)
1.3 開啟使用註解代替配置文件
1.4 在類中使用註解完成配置
2.將對象註冊到容器//
//@Component("user")
// @Service("user") // service層
// @Controller("user") // web層
@Repository("user")// dao層
3.修改對象的作用範圍
//指定對象的作用範圍
@Scope(scopeName="singleton")
4.值類型注入
通過反射的Field賦值,破壞了封裝性:
@Value("tom")
private String name;
通過set方法賦值,推薦使用.:
@Value("tom")
public void setName(String name) {
this.name = name;
}
5.引用類型注入
//@Autowired //自動裝配
//問題:如果匹配多個類型一致的對象.將無法選擇具體注入哪一個對象.
//@Qualifier("car2")//使用@Qualifier註解告訴spring容器自動裝配哪個名稱的對象
private Car car;
推薦方式:
@Resource(name="car")//手動注入,指定注入哪個名稱的對象
private Car car;
6.初始化|銷毀方法
@PostConstruct //在對象被創建後調用.init-method
public void init{
System.out.println("我是初始化方法!");
}
@PreDestroy //在銷毀之前調用.destory-method
public void destory{
System.out.println("我是銷毀方法!");
}
二、STS插件1.手動安裝插件(成功率低)
步驟1:
步驟2:
步驟3:
//幫我們創建容器
@RunWith(SpringJUnit4ClassRunner.class)
//指定創建容器時使用哪個配置文件
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
//將名為user的對象注入到u變數中
@Resource(name="user")
private User u;
3.測試
@Test
public void fun1{
System.out.println(u);
}
四、spring中的aop1.aop思想介紹
2.spring中的aop概念
3.1 動態代理(優先)
被代理對象必須要實現介面,才能產生代理對象.如果沒有介面將不能使用動態代理技術
3.2 cglib代理(沒有介面)
第三方代理技術,cglib代理.可以對任何類生成代理.代理的原理是對目標對象進行繼承代理. 如果目標對象被final修飾.那麼該類無法被cglib代理.
4.aop名詞學習spring的aop包:
spring-aspects-4.2.4.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
spring需要第三方aop包:
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
1.2 準備目標對象public class UserServiceImpl implements UserService {
@Override
public void save {
System.out.println("保存用戶!");
//int i = 1/0;
}
@Override
public void delete {
System.out.println("刪除用戶!");
}
@Override
public void update {
System.out.println("更新用戶!");
}
@Override
public void find {
System.out.println("查找用戶!");
}
}
1.3 準備通知
//通知類
public class MyAdvice {
//前置通知
// |-目標方法運行之前調用
//後置通知(如果出現異常不會調用)
// |-在目標方法運行之後調用
//環繞通知
// |-在目標方法之前和之後都調用
//異常攔截通知
// |-如果出現異常,就會調用
//後置通知(無論是否出現 異常都會調用)
// |-在目標方法運行之後調用
//----------------------------------------------------------------
//前置通知
public void before{
System.out.println("這是前置通知!!");
}
//後置通知
public void afterReturning{
System.out.println("這是後置通知(如果出現異常不會調用)!!");
}
//環繞通知
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("這是環繞通知之前的部分!!");
Object proceed = pjp.proceed;//調用目標方法
System.out.println("這是環繞通知之後的部分!!");
return proceed;
}
//異常通知
public void afterException{
System.out.println("出事啦!出現異常了!!");
}
//後置通知
public void after{
System.out.println("這是後置通知(出現異常也會調用)!!");
}
}
1.4 配置進行織入,將通知織入目標對象中
2.步驟(註解配置)前面的1,2,3步和xml配置一樣2.4 配置進行織入,將通知織入目標對象中
applicationContext.xml:
通知類:
//通知類
@Aspect
//表示該類是一個通知類
public class MyAdvice {
@Pointcut("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public void pc{}
//前置通知
//指定該方法是前置通知,並制定切入點
@Before("MyAdvice.pc")
public void before{
System.out.println("這是前置通知!!");
}
//後置通知
@AfterReturning("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public void afterReturning{
System.out.println("這是後置通知(如果出現異常不會調用)!!");
}
//環繞通知
@Around("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("這是環繞通知之前的部分!!");
Object proceed = pjp.proceed;//調用目標方法
System.out.println("這是環繞通知之後的部分!!");
return proceed;
}
//異常通知
@AfterThrowing("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public void afterException{
System.out.println("出事啦!出現異常了!!");
}
//後置通知
@After("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public void after{
System.out.println("這是後置通知(出現異常也會調用)!!");
}
}


※小程序解析html標籤wxPrase插件
※aws ec2的iam role深度解析
※OpenStack(企業私有雲)萬里長征第三步——調試成功
※Javascript中的類型轉換
※第46篇 多線程如何排隊執行
TAG:達人科技 |
※WordPress怎麼生成sitemap.xml?插件XML Sitemap & Google News
※MultiScatter:3ds Max的插件|可與V-Ray和Mental Ray渲染系統配合使用!
※WordPress Simple Social Buttons插件安全漏洞
※spring boot 2.x 整合mybaits及分頁插件
※WordPress Plugin AutoSuggest插件SQL注入復現與分析
※WordPress代碼高亮插件Pure-Highlightjs
※IDEA中安裝MongoDB插件-再也無要nosql manager for mongodb
※Flow:實用的burp插件;Slingshot APT攻擊
※WordPress插件YITH WooCommerce Wishlist SQL注入漏洞
※WordPress登錄頁面美化插件:Login Designer
※AMD為macOS版Blender和Maya發布Radeon ProRender插件
※微軟的Unity插件Project Acoustics為VR提供雲端3D音頻
※Photoshop詳細解析CameraRaw插件使用
※bootstrap Fileinput插件的使用實例
※Photoshop圓角編輯神器,功能增強插件-Corner Editor 2015
※Adobe Premiere Pro CC新插件增加Insta360 Pro視頻支持
※星風PresenZ技術將以插件形式支持Autodesk 3ds Max
※被EDIUS官方「點名」的音頻插件:Restauration Suite
※Chromium版Edge瀏覽器上手:已支持原生Chrome插件
※Oculus Unity插件宣布新增Windows MR支持