一、使用註解配置spring
1.步驟
1.1 導包4+2+spring-aop
# 4代表:
# # 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 在類別中使用註解完成設定
//<bean></bean>//@Component("user")// @Service("user") // service层// @Controller("user") // web层@Repository("user")// dao层
## 3.修改修改至容器
//指定对象的作用范围@Scope(scopeName="singleton")
## 3.修改物件的作用範圍
@Value("tom") private String name;
透過反射的Field賦值,破壞了封裝性:
@Value("tom") public void setName(String name) {this.name = name; }
透過set方法賦值,建議使用.:
//@Autowired //自动装配//问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.//@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象private Car car;
# 5.引用類型注入
@Resource(name="car")//手动注入,指定注入哪个名称的对象private Car car;
@PostConstruct //在对象被创建后调用.init-methodpublic void init(){ System.out.println("我是初始化方法!"); } @PreDestroy //在销毁之前调用.destory-methodpublic void destory(){ System.out.println("我是销毁方法!"); }#
推薦方式:
//帮我们创建容器@RunWith(SpringJUnit4ClassRunner.class)//指定创建容器时使用哪个配置文件@ContextConfiguration("classpath:applicationContext.xml")public class Demo {//将名为user的对象注入到u变量中@Resource(name="user")private User u;
#
建議方式:@Testpublic void fun1(){ System.out.println(u); }6.初始化|銷毀方法
public class UserServiceImpl implements UserService { @Overridepublic void save() { System.out.println("保存用户!");//int i = 1/0; } @Overridepublic void delete() { System.out.println("删除用户!"); } @Overridepublic void update() { System.out.println("更新用户!"); } @Overridepublic void find() { System.out.println("查找用户!"); } }
二、STS外掛
# 步驟2:
#
步驟3:2.直接使用spring裝好插件的eclipse
三、spring與junit整合測試
1.導包4+2+aop+test
#
//通知类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("这是后置通知(出现异常也会调用)!!"); } }
3.測試
<?xml version="1.0" encoding="UTF-8"?><beans><!-- 准备工作: 导入aop(约束)命名空间 --><!-- 1.配置目标对象 --><bean></bean><!-- 2.配置通知对象 --><bean></bean><!-- 3.配置将通知织入目标对象 --><config><!-- 配置切入点 public void cn.itcast.service.UserServiceImpl.save() void cn.itcast.service.UserServiceImpl.save() * cn.itcast.service.UserServiceImpl.save() * cn.itcast.service.UserServiceImpl.*() * cn.itcast.service.*ServiceImpl.*(..) * cn.itcast.service..*ServiceImpl.*(..)--><pointcut></pointcut><aspect><!-- 指定名为before方法作为前置通知 --><before></before><!-- 后置 --><after-returning></after-returning><!-- 环绕通知 --><around></around><!-- 异常拦截通知 --><after-throwing></after-throwing><!-- 后置 --><after></after></aspect></config></beans>

# 3.spring實作aop的原理
3.1 動態代理(優先)
被代理物件必須要實作介面,才能產生代理物件.如果沒有介面將不能使用動態代理技術
3.2 cglib代理(沒有接口)
第三方代理技術,cglib代理.可以對任何類生成代理.代理的原理是對目標對象進行繼承代理. 如果目標對像被final修飾.那麼此類別無法被cglib代理人.
4.aop名詞學習
#
五、spring中的aop演示 1.步驟(xml配置) 1.1 導包4+2 spring的aop包: spring-aspects-4.2.jar## spring-aspects-4.2.spring需要第三方aop包:
com.springsource.org.aopalli
# com.springsource.org.aopalli# com.springsource.org.aopalli
#1.0.0.0.# com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
<?xml version="1.0" encoding="UTF-8"?><beans><!-- 准备工作: 导入aop(约束)命名空间 --><!-- 1.配置目标对象 --><bean></bean><!-- 2.配置通知对象 --><bean></bean><!-- 3.开启使用注解完成织入 --><aspectj-autoproxy></aspectj-autoproxy></beans>
//通知类@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("这是后置通知(出现异常也会调用)!!"); } }1.4 設定進行織入,將通知織入目標物件中######rrreee###### 2.步驟(註解配置)###### 前面的1,2,3步驟和xml配置一樣###### 2.4 配置進行織入,將通知織入目標物件中###### applicationContext.xml:#######rrreee### applicationContext.xml:#######rrreee#### ### 通知類別:######rrreee###### ####
以上是使用註解配置spring的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具