首頁 > Java > java教程 > 主體

使用註解配置spring的詳細介紹

零下一度
發布: 2017-06-30 09:53:47
原創
1807 人瀏覽過

一、使用註解配置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 在類別中使用註解完成設定

  2.將物件註冊到容器

//<bean name="user" class="cn.itcast.bean.User"  />//@Component("user")//    @Service("user") // service层//    @Controller("user") // web层@Repository("user")// dao层
登入後複製

##  3.修改修改至容器
//指定对象的作用范围@Scope(scopeName="singleton")
登入後複製

##  3.修改物件的作用範圍

    @Value("tom")    private String name;
登入後複製
  4.值類型注入

   透過反射的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外掛

  1 .手動安裝外掛程式(成功率低)

  

   步驟1:

  

#   步驟2:

#   步驟2:

#  

   步驟3:

  

  2.直接使用spring裝好插件的eclipse

   

 

三、spring與junit整合測試

  1.導包4+2+aop+test

#  2.設定註解

#

//通知类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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/context  http://www.springframework.org/schema/aop  "><!-- 准备工作: 导入aop(约束)命名空间 --><!-- 1.配置目标对象 --><bean name="userService" class="cn.itcast.service.UserServiceImpl" ></bean><!-- 2.配置通知对象 --><bean name="myAdvice" class="cn.itcast.d_springaop.MyAdvice" ></bean><!-- 3.配置将通知织入目标对象 --><aop: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.*(..)--><aop:pointcut expression="execution(* cn.itcast.service.*ServiceImpl.*(..))" id="pc"/><aop:aspect ref="myAdvice" ><!-- 指定名为before方法作为前置通知 --><aop:before method="before" pointcut-ref="pc" /><!-- 后置 --><aop:after-returning method="afterReturning" pointcut-ref="pc" /><!-- 环绕通知 --><aop:around method="around" pointcut-ref="pc" /><!-- 异常拦截通知 --><aop:after-throwing method="afterException" pointcut-ref="pc"/><!-- 后置 --><aop:after method="after" pointcut-ref="pc"/></aop:aspect></aop:config></beans>
登入後複製
 

四、spring中的aop

  1.aop思想介紹

  2.spring中的aop概念

# 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-4.2.4.RELEASE.jar

   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

   1.2 準備目標物件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/context  http://www.springframework.org/schema/aop  "><!-- 准备工作: 导入aop(约束)命名空间 --><!-- 1.配置目标对象 --><bean name="userService" class="cn.itcast.service.UserServiceImpl" ></bean><!-- 2.配置通知对象 --><bean name="myAdvice" class="cn.itcast.e_annotationaop.MyAdvice" ></bean><!-- 3.开启使用注解完成织入 --><aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
登入後複製
    1.3 通知
//通知类@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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!