zoukankan      html  css  js  c++  java
  • springIOC、AOP的一些注解

    springIOC、AOP的一些注解(使用这些注解之前要导入spring框架的一些依赖):
        1.注入IOC容器
            @Compontent:使用注解的方式添加到ioc容器需要在配置文件中添加扫包操作<context:component-scan base-package=“需要扫的包”/>这个注解有个value属性,就相当于bean中的id;
            大多数类能使用这个注解实现装配操作,但是我们在实际开发中会有三层:controller层(action),service层,dao层,
            那么我们@Compontent也有相应的“子类”注解来让我们更好的区分这些层次:@Controller控制controller层,@Service
            控制service层,@Repository控制dao层;

        2.属性值的装配
            @Value装配属性值相当于bean中的<property name="" value="要装配的值"/>

        3.其他bean的引用
            ① @Autowired(自动装配):对于其他bean的引用我们需要使用自动装配,它是根据byType和byName装配的,只要满足其中
            一个条件就装配成功;它还可以和另外一个注解@Qualifier("要装配的其他bean的id值")。

            ② @Resource用法和@Autowired用法一致也是根据byType和byName装配的;和@Autowired的区别是不要和@Qualifier组合
            使用,可以直接在括号里指定其他bean的id:@Resource("其他bean的id")。

            ③ @Inject(需要去中央仓库引入JSR330的架包,导入javax.inject依赖即可):如果需要指定bean,主要组合一个注解叫
              @Named("其他bean的id"),用法和@Autowired相似;那么由此可见对其他bean的引用,最方便的还是@Resource注解。

        4.集合类型的装配
            使用@Resource(name="bean中的id名")以下是在配置文件中配置的各种集合(需要用到一个util的命名空间):
          

         ①list集合: <util:list id="list">
                            <value>1</value>
                            <value>2</value>
                        </util:list>
            
            ②set集合:  <util:set id="set">
                            <ref bean="其他bean的id"/>
                            <bean class="ioc.OtherBean">
                                <property name="name" value="zhangsan"/>
                            </bean>
                        </util:set>
            
            ③map集合:   <util:map id="maps">
                            <entry key="123" value-ref="otherBean"/>
                            <entry>
                                <key>
                                    <value>456</value>
                                </key>
                                <ref bean="otherBean1"/>
                            </entry>
                        </util:map>

        5.初始化和销毁
            ① @PostConstruct(在对象创建完成后执行初始化方法)一般反正该init()方法上
            ② @PreDestory(在容器销毁之后执行的销毁方法)一般放在destory()方法上
        6.域
            @Scope(scopeName="prototype")加在类上使该类变成多列,singleton参数为单列。

        7.Aop的一些注解由AspectJ提供,步骤如下:
            1.编写通知
            2.配置(注解方式配置AOP非常简单)
                ①.将target放入到IOC容器
                ②.将通知添加到IOC容器
                ③.指定切面 ,在通知上添加@Aspect
                ④.给方法添加通知类型
                    @Before前置通知
                    @AfterRetuning后置通知
                    @AfterThrowing异常通知
                    @Around环绕通知
                ⑤.解析Aspect的注解,解析注解有两种方式:
                    (1). 在容器中添加<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>
                    (2).在容器中添加<aop:aspectj-autoproxy/>,这个是aop的一个命名空间,显然这种方法比较简单,但是底层实现还是上面的。
            3.对于切点@Pointcut(这里就用@Before为列了):
                ① 用法一:@Before(“跟AspectJ表达式,你想添加通知扫描的包”)
                ② 对pointcut,可以在通知中单独定义一个pointcut方法,在方法添加一个注解@Pointcut,
                @Pointcut("execution(* aop.impl.*ServiceImpl.*(..))"),这个value里面是AspectJ表达式,具体用法就不介绍了
                public void pointcut(){}
                使用的时候
                  @Before("pointcut()"),这里必须加上()

  • 相关阅读:
    数据库表与视图的区别
    maven中snapshot版本和正式版本的区别
    @Retention注解
    java泛型以及通配符
    git 删除了本不应该删除的commit 如何恢复
    ES group分组聚合的坑
    solution for 1006 中国剩余定理
    solution for POJ 1001
    ondraw() 和dispatchdraw()的区别
    android几种定时器机制及区别(转载整理)
  • 原文地址:https://www.cnblogs.com/MrXiaoAndDong/p/annotation.html
Copyright © 2011-2022 走看看