spring-一些需要技巧

引入properties文件

写命名空间

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd

然后配置一个标签就可以用了

<context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

开启扫描注解

<context:component-scan base-package="com.smu.controller"/>

对于AOP

aspectjweaver包含aspectjrt,所以我们只需要引入aspectjweaver依赖包就可以了

五种通知类型

<aspect>方式

复制代码
<bean id="user" class="com.smu.service.User"/>
    <!--自定义的增强类-->
    <bean id="myAdvice" class="com.smu.advice.MyAdvice"/>
    <aop:config>
        <!--配置execution表达式,表示需要增求的方法-->
        <aop:pointcut id="mypointcut" expression="execution(* com.smu.service.User.show())"/>
        <!--配置增强方法所在的类-->
        <aop:aspect ref="myAdvice">
            <!--配置在方法前执行或者后面或者环绕执行,以及需要引用的表达式即需要对哪些方法增强-->
            <!--方法名为需要执行的方法-->
            <aop:before method="before" pointcut-ref="mypointcut"/>
        </aop:aspect>
    </aop:config>
复制代码

<advicor>方式

需要自定义类实现借助Advice接口的子接口

 

execution表达式

execution([访问修饰符] 返回值类型 包名.类名.方法名(参数))

  • 访问修饰符可以不写
  • 返回值类型,某一级包名,类名,方法名,可以使用**表示任意
  • 包名与类名之间使用.表示该包下的类,使用..表示该包及其子包下的类
  • 参数列表可以使用..表示任意参数

通过方法入参定义切点

切点表达式中的方法入参部分比较复杂,可以使用*和..通配符。 其中 *表示任意参数类型的参数, 而..表示任意类型的参数且参数个数不限。

execution(* joke(String,int))

匹配joke(String,int)方法,且joke方法的第一个入参是String,第二个入参是int。 比如 匹配 SmartSeller#joke(String ,int)方法。 如果方法中的入参类型是java.lang包下的,这可以直接使用类名,否则必须使用全限定类名,比如 joke(java.util.List,int)

execution(* joke(String,*))

匹配目标类中的joke()方法,该方法第一个入参为String,第二个入参为任意类型。 比如 joke(String s1, String s2)和joke(String s1,double d)都匹配,但是 joke(String s1, String s2,double d3)不匹配。

execution(* joke(String,..))

匹配目标类中的joke方法,该方法的第一个入参为String,后面可以有任意个入参且入参类型不限。 比如 joke(String s1),joke(String s1,String s2)和joke(String s1,double d2,String s3)都匹配。

execution(* joke(Object+))

匹配目标类中的joke()方法,方法拥有一个入参,且入参是Object类型或该类的子类。 它匹配joke(String s1) 和joke(Client c) . 如果定义的切点是execution(* joke(Object)) ,则只匹配joke(Object object)而不匹配joke(String s1) 或者joke(Client c)。

 

 

 

 

 

 

 

 

 

.

posted @   happy_in  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示