ホームページ > Java > &#&チュートリアル > アノテーションを使用して Spring を構成する方法の詳細な紹介

アノテーションを使用して Spring を構成する方法の詳細な紹介

零下一度
リリース: 2017-06-30 09:53:47
オリジナル
1827 人が閲覧しました

1. アノテーションを使用して Spring を設定する

1. 手順

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. オブジェクトをコンテナに登録する

//<bean name="user" class="cn.itcast.bean.User"  />//@Component("user")//    @Service("user") // service层//    @Controller("user") // web层@Repository("user")// dao层
ログイン後にコピー

3. 変更オブジェクトのスコープ

//指定对象的作用范围@Scope(scopeName="singleton")
ログイン後にコピー

4. 値の型の注入

リフレクションによるフィールドの代入はカプセル化を破壊する:

    @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-methodpublic void init(){
        System.out.println("我是初始化方法!");
    }
    @PreDestroy //在销毁之前调用.destory-methodpublic void destory(){
        System.out.println("我是销毁方法!");
    }
ログイン後にコピー

2番目、STSプラグイン

1.プラグインを手動でインストールします(成功率は低いです)

ステップ1:

ステップ2:

ステップ3:

2. springを直接使ってeclipseをインストールします

3. 春と十二月統合テスト

1. ガイドパッケージ4+2+aop+test

2. 構成アノテーション

//帮我们创建容器@RunWith(SpringJUnit4ClassRunner.class)//指定创建容器时使用哪个配置文件@ContextConfiguration("classpath:applicationContext.xml")public class Demo {//将名为user的对象注入到u变量中@Resource(name="user")private User u;
ログイン後にコピー

3. テスト

    @Testpublic void fun1(){
        
        System.out.println(u);
        
    }
ログイン後にコピー

4. 春のAop

1. aop思考の紹介

2. Spring の AOP の概念

3. Spring の AOP 実装の原則

3.1 動的プロキシ (優先)

プロキシ オブジェクトは、へのインターフェースプロキシ オブジェクトを生成します。インターフェイスがない場合、動的プロキシは使用できません。 テクノロジー

3.2 cglib プロキシ (インターフェイスなし)

サードパーティのプロキシ テクノロジ、cglib プロキシは、任意のクラスに対して生成できます。ターゲット オブジェクトのプロキシを継承するため、ターゲット オブジェクトが最終的に変更されている場合、クラスは CGLIB プロキシ .a 4.AOP 名詞 学習

c c

1.1 (XML 構成)

1.1 ガイドパッケージ 4+2

Spring AOP パッケージ:

spring-aspects-4.2.4.RELEASE.jar

spring-aop-4.2.4。リリース.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 {
    @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("查找用户!");
    }
}
ログイン後にコピー

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 ウィービングを設定し、通知を対象オブジェクトに織り込む

<?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>
ログイン後にコピー
2. 手順(アノテーションの設定)

前の手順1、2、そして3はxml設定と同じです

2.4 設定は対象オブジェクトに織り込まれます

ApplicationContext.xml:

🎜
<?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>
ログイン後にコピー
🎜 🎜 通知カテゴリ: 🎜🎜
//通知类@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("这是后置通知(出现异常也会调用)!!");
    }
}
ログイン後にコピー
🎜🎜🎜

以上がアノテーションを使用して Spring を構成する方法の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート