spring注解终结

spring annotation info

@Autowried 默认是按类型进行装备bean的属性

EXAMPLE

@Autowired
private PersonDao personDao //字段定义

@Autowired
public void setOrderDao(OrderDao orderDao){
}

@Autowired info
@Autowired 注解默认是按照类型装配依赖对象 默认情况要求依赖对象不需存在 如果允许null值 可以设置 required 属性为 false
如果要使用按照名称装配 可以结合 @Qualifie注解一起使用

EXAMPLE

@Autowired() @Qualifie("personDaoBean")

 

@Resource  默认是按名称进行装配bean的属性 当找不到名称 按照类型进行装配

EXAMPLE

@Resource(name="personDao")
private PersonDao personDao

<bean id="" class="" autowire="byType" />

byType 按照类型装配 可以根据属性类型 在容器中寻找跟该类型匹配的bean如果发现多个会抛出异常 如果没有找到属性值设置为null

byName 按照名称装配 根据属性名称 在容器中寻找该属性名称相同的bean 如果找不到 属性值为null

constructor 与 byType 方式相同 不同之处用于 构造函数参数 如果在容器中没有找到与构造参数类型一致的bean 那么会抛出异常

autodetect 通过bean类型的自省机制 来决定是用constructor 还是 byType方式进行装配 如果发信默认构造器 使用 byType

<context:component-scan base-package=""></context:component-scan>和注解配合使用

@Service @Controller @Repository @Commponent 用于类定义上

@Service("bean_name") 制定Service层的名字

@Scope("prototype") 作用域范围 用户类定义上


@PostConstruct 初始化方法 定义方法上

@PreDestroy 销毁方法 定义方法上


权限系统 粗粒度的权限控制 细粒度的权限控制(方法拦截)

Aspect(切面) 指横切性关注点的抽象即为切面 他与类相似 只是两者的关注点不一样 类是对事物的特征的抽象
是横切性关注点的抽象

joinpoint(连接点) 所谓连接点是指那些被拦截到的点 在spring中 这些点指方法
spring只是支持方法类型的链接点 实际上 joinpoint还可以是field 或者是构造器

Pointcut(切入点)所谓切入点是指我们对哪些 joinpoint进行拦截的定义

Advice(通知)所谓通知就是指拦截到joinpoint之后要做的事情就是通知
通知分为前置通知 后置通知 异常通知 最终通知 环绕通知

Target(目标对性)代理的目标对象

Weave(织入)将aspects应用到target对象上并导致proxy对象创建的过程

Introduction(引入)在修改类代码的前提下,Introcuction 可以在运行期为类
动态的添加一些方法或Field.

 

xmlns:aop="http://www.springframework.org/schema/aop"
<aop:aspectj-autoproxy/>

EXAMPLE:

@Aspect
public class LogPrint {
   
    @Pointcut("execution(*(代表任意返回值) cn.chechi.service..(两个点代表子包)*(所有类).*(所有的方法)(..(方法参数列表)))")
    private void anyMethod(){

    }

    @Befor("anyMthod() && args(userName)")
    public void doAccessCheck(String userName) {
        // 定义前置通知
    }

    @AfterReturning(pointcut="anyMethod()",returning="revalue")
    public void doReturnCheck(String revalue) {
        // 定义后置通知
    }

    @AfterThrowing(pointcut="anyMethod()",throwing="ex")
    public void doExceptionAction(Exception ex) {
        // 定义例外通知
    }
   
    @After("anyMthod()")
    public void doReleaseAction(){
        // 定义最终通知
    }

    @Around("anyMthod()")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        // 定义环绕通知
    }
}

    XML
    <aop:aspecjt-autoproxy/>

    <aop:config>
        <aop:aspect id="asp" ref="aspetbean">
                <aop:pointcut id="point_name" expression="execution([!void][java.lang.String] cn.chechi.service.imp.PersonService.*(java.lang.String,..))"/>
                <aop:befor pointcut-ref="point_name" method="method_name"/>
                <aop:after-returning pointcut-ref="point_name" method="method_name"/>
      <aop:after-throwing pointcut-ref="point_name" method="method_name"/>
      <aop:after pointcut-ref="point_name" method="method_name"/>
      <aop:around pointcut-ref="point_name " method="method_name"/>
        </aop:aspect>
    </aop:config>

 

 

 事务注解说明
@Transactional 类事务说明机制

@Transactional(noRollbackFor=RuntimeException.class) 方法事务说明
@TRacsactional(RollbackFor=Exception.class)
@Tracsactional(readOnly=true);
@Tracsactional(timeout=100)
@Tracsactional(isolation)数据库的隔离级别
{
    Read Uncommited:读取未提交的数据(会出现脏读 不可重复读 幻读)
    Read Cimmited:读已提交的数据(会出现不可重复读和幻读)
    Repeatable Read:可重复读(会出现幻读)
    Serializable:串行化
}

information
{
    脏读:一个事物读取到另外一个事物未提交的更新的数据
    不可重复读:在同一个事物中,多次读取同一个数据返回结果有所不同 就是后续的读取可以读到另外一个事物的已经提交的更新数据
    可重复读:在同一个事物多次读取数据时 能够保证所读取数据一样 也就是后读取的不能读到另外一个事物已经提交的数据
    幻读:一个事物读取到另外一个事物已经提交的更新的数据
}

针对查询方法
@Transactional(propagation=Propagation.NOT_SUPPORTED)针对某个方法不开启事务
@Transactional(propagation=Propagation.REQUIRED)默认的事务支持

Propagation.REQUIRED

Propagation.NOT_SUPPOKTED

Propagation.REQUIRESNEW

propagation.MANDATORY

Propagation.SUPPOKTS

Propagation.Never

Propagation.NESTED

XML配置事物

注解配置事物例子

public class Bean1{
    @Transaction(propagation=Propagation.Required)
    public void update(){
        executeUpdate(SQL);
    }
}

public class Bean2{
    @Transaction(propagation=Propagation.Required)
    public void update(){
        executeUpdate(SQL);
    }
}

public class TransactionExample {
    @Transaction(propagation=Propagation.Required)
    public void payment(){
        daoBean1.update();
        daoBean2.update();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值