zoukankan      html  css  js  c++  java
  • Aop 初学者

                            面向 “Aop” (切面)编程

       配置applicationContext.xml

        1.三种注入方式

    //创建存储数据的类
        public class happyServlet {

        private String info;

        public happyServlet() {
        }

        public happyServlet(String info) {
            this.info = info;
        }

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

        public void work(){
        System.out.println("我是Info::"+info);
    }

    }   


           1.1 set方法注入本质上是调用了Bean的setXXX()方法进行值的注入


         //配置 xml 调用类中参数进行赋值。

         //id: 理解为我们 happyServlet实例对象或者是别名
         //class : 是调用类的路径
     
             <bean id="Day01" class="cn.happy.Day01.happyServlet">

        //name:为我们的创建的属性
        //value:值

             <property name="info" value="大明星"></property>
             </bean>


           1.2 构造注入

           1.给实体类添加构造
           2.通过constructor-arg设置的参数的值
           结论:如果构造注入和set方法注入应用到同一个属性上,那么优先级高的是set方法注入

             <bean id="Day01" class="cn.happy.Day01.happyServlet">
                <constructor-arg index="0" value="ss"></constructor-arg>
                <property name="info" value="我是大明星"></property>
             </bean>

            1.3  p命名空间注入

            1.引入命名空间
            2.不再使用bean的子节点,提炼成属性 p:info , p:info-ref="我是大明星" 提炼构造中的方法


             <bean id="Day01" class="cn.happy.Day01.happyServlet" p:info="我是大明星">        
             </bean>

    // 调用我们的测试类测试我们传输的数据
        @Test
        public void ss() {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            happyServlet srvice = (happyServlet) context.getBean("Day01");
            srvice.work();
          }

         2.集合属性注入


    public class MyColleaction {
      public MyColleaction() {
            System.out.println("我是大明星");
        }

        private String[]array;
        private List<String>list;
        private Set<String>set;
        private Map<String,String>map;
        private Properties properties;

        public String[] getArray() {
            return array;
        }

        public void setArray(String[] array) {
            this.array = array;
        }

        public List<String> getList() {
            return list;
        }

        public void setList(List<String> list) {
            this.list = list;
        }

        public Set<String> getSet() {
            return set;
        }

        public void setSet(Set<String> set) {
            this.set = set;
        }

        public Map<String, String> getMap() {
            return map;
        }

        public void setMap(Map<String, String> map) {
            this.map = map;
        }

        public Properties getProperties() {
            return properties;
        }

        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    }

    //xml
    <bean id="colleaction" class="cn.happy.Day04.MyColleaction" >
        <!--   scope="prototype"    手动控制不让计算机自己创建对象     autowire="byName" 根据方法对象注入  byType  类型注入只允许有一个 -->
        <property name="array">
           <array>
               <value>刘德华</value>
           </array>
        </property>


        <property name="list">
            <list>
                <value>庞中华</value>
            </list>
        </property>

        <property name="set">
            <set>
                <value>方中华</value>
            </set>
        </property>


        <property name="properties">
            <props>
                <prop key="001">邓紫棋</prop>
            </props>
        </property>

        <property name="map">
            <map>
                <entry key="01">
                    <value>邓丽君</value>
                </entry>
            </map>
        </property>

    </bean>

    3.IOC和DI
      IOC侧重的是思想 ,DI实现
      IOC侧重构造对象:通过容器  DI对属性值进行注入  (普通属性和域属性的注入)


    4.AOP:Aspect Oriented Programming 面向切面编程  增强类
      OOP  面向对象编程
      OOD
      OOA
     
    5.AOP 
      前置增强  MethodBeforeAdvice
      引入一个节点
      aspectjweaver
         <!-- https://mvnrepository.com/artifact/aspectj/aspectjweaver -->
            <dependency>
                <groupId>aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.5.3</version>
            </dependency>


    //案例


    //aop
    public class MyBeforeAdvice implements  MethodBeforeAdvice {
        //AfterReturningAdvice 后置增强
        public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("记录日志");
        }
    }

    //Dao


    public interface SomeDao {
        public void ss();
    }

    //

    public class SomeDaoImpl  implements SomeDao{
        public void ss() {
            System.out.println("加油 !  努力 !");
        }
    }

    //servlet


    public interface SomeServlet {
        public  void ss();
    }


    //实现

    public class SomeServletImpl implements SomeServlet{
        SomeDao som=new SomeDaoImpl();

        public SomeDao getSom() {
            return som;
        }

        public void setSom(SomeDao som) {
            this.som = som;
        }

        public void ss() {
           som.ss();

        }
    }
    //xml

       <bean id="someDao" class="cn.happy.Day03.dao.SomeDaoImpl"></bean>

       <bean id="someServlet" class="cn.happy.Day03.service.SomeServletImpl">
           <property name="som" ref="someDao"></property>
       </bean>

        <bean id="advice" class="cn.happy.Day03.aop.MyBeforeAdvice"></bean>
        <aop:config>
            <aop:pointcut id="MyBeforeAdvice" expression="execution(* *..service.*.*(..))"></aop:pointcut>
            <aop:advisor advice-ref="advice" pointcut-ref="MyBeforeAdvice"></aop:advisor>
        </aop:config>

    6.AOP概念
      1.面向切面编程 Aspact Oriented Programming
      2.7个专业术语
        增强处理/通知(Advice)
           增强类中的方法
        切入点(Pointcut)
             符合切点表达式的方法才能称为切入点
        连接点(Join Point)
             目标对象中的所有方法都是连接点
        切面(Aspect)
           增强类
        目标对象(Target object)
           等待被增强的对象
        AOP代理(AOP proxy)
            代理对象,内存中创建的。
        织入(Weaving)
          将切面和目标对象进行绑定的过程

  • 相关阅读:
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
    atitit。 hb Hibernate sql 查询使用
    atitit.插件体系设计总结o73.doc
    Atitit.可视化编程jbpm6 的环境and 使用总结...
    paip.自动import的实现跟java.lang.SecurityException Prohibited package name java
    Linux下tar.xz结尾的文件的解压方法
    ubuntu下的Samba配置:使每个用户可以用自己的用户名和密码登录自己的home目录
    ubuntu Linux离线安装软件包
    C语言文件操作解析(一)[转载]
    PDF XChange Viewer文件关联
  • 原文地址:https://www.cnblogs.com/1612ss/p/7643356.html
Copyright © 2011-2022 走看看