`
xiaolaogong
  • 浏览: 66827 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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();
    }
}

分享到:
评论

相关推荐

    spring+cxf 整合jar包

    这包括服务接口、实现类、服务终结点(Endpoint)等,通过XML配置文件或注解进行声明。 2. **服务消费者(Service Consumer)**:Spring可以作为CXF客户端,通过JAX-WS或JAX-RS接口来消费服务。同样,这可以通过...

    SSH框架整合spring4+hibernate4+struts2(终结版)

    Spring的ApplicationContext容器管理着应用中的所有bean,通过XML配置或注解方式实现bean的创建、依赖注入和生命周期管理。 2. **Hibernate框架**: Hibernate是Java领域中最流行的对象关系映射(ORM)工具之一。...

    Jaxws+Spring整合实例

    - 创建JAX-WS终结点:通过Spring的`WebServiceServerFactoryBean`或自定义的`Endpoint`实现,将服务bean暴露为Web服务。 - 部署和运行:将Spring容器和Web服务部署到支持JAX-WS的服务器上,如Tomcat、Jetty等。 5...

    Spring整合CXF demo

    在Spring的配置文件(如`applicationContext.xml`)中定义CXF的bean,包括服务接口、实现类和服务终结点。例如: ```xml ``` #### 4.3 定义服务接口和服务实现 创建服务接口和其实现类,比如`MyService.java`...

    JAX-WS + Spring 实现webService示例

    4. **发布Web Service**:通过上述配置,Spring将自动创建一个基于HTTP的SOAP终结点,可供其他系统调用。 **消费Web Service** 1. **生成客户端代理**:通常,我们使用WSDL文件来生成一个客户端代理类,这个类提供...

    Spring Boot 整合 Dubbo + Zookeeper 实现服务者与消费者的数据调用

    1.SpringBoot聚合工程整合Dubbo,实现服务提供者与服务消费者的数据调用, 2.该项目提高了自己对Spring Boot整合...7. 本项目完全为聚合工程,DubboRPC远程调用数据,及注解式开发,注入远程对象实现消费者的消费。

    CXF接口Spring+Hibernate的添加完整版

    3. 在服务实现中,使用Spring的@Autowired注解注入DAO层,通过Hibernate进行数据库操作。 4. 定义RESTful或SOAP接口,通过CXF暴露服务,接受并处理请求。 5. 测试服务,验证接口的正确性和数据的持久化。 这种整合...

    Spring AOP 简单demo

    Spring 3.0以后,我们可以使用`@AspectJ`注解驱动的AOP,这样可以避免XML配置,使代码更简洁: ```java @Configuration @EnableAspectJAutoProxy public class AppConfig { @Bean public LoggingAspect ...

    cxf+spring+hibernate集成整合jar包

    3. **配置CXF**:创建Web服务接口和实现,然后在Spring配置文件中声明CXF的JAX-WS终结点。可以使用Spring的`jaxws:endpoint`标签来实现这一点,这样CXF就会自动扫描并处理相关的Web服务。 4. **整合与测试**:在...

    CXF 整合 Spring 搭建Web Service

    通过使用`@WebService`注解,我们可以标记接口为Web服务接口,而CXF会自动处理服务的发布和暴露。 为了整合CXF和Spring,我们需要在Spring配置文件中添加CXF的必要组件。这通常包括`JaxWsServerFactoryBean`或`...

    【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战 【源码】

    在云原生架构中,微服务间的通信是一个关键问题,Spring Cloud Alibaba 提供了一套解决方案,其中Feign是实现服务间远程调用的一种重要组件。本文将深入探讨如何使用Spring Cloud Alibaba的Feign进行实战应用,并...

    CXF3.0+Spring3.2 RESTFul服务

    4. **配置CXF**:在Spring的配置文件(如`appContext.xml`)中配置CXF的JAX-RS终结点: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    spring-ws-security-soap-example:显示如何在Spring中设置安全的SOAP Web服务的示例

    对于每种认证方法,每种认证方法都有一个不同的终结点: 不安全。 普通密码。 摘要密码。 签名。 加密。 所有这些端点都基于相同的结构:带注释的类,用于生成WSDL的XSD文件和简单的模型。 只有实际的Spring...

    spring-boot-protobuf-serialization:这是一个展示如何在Web服务集成中使用Protobuf协议的项目

    spring-boot-protobuf序列化 此仓库中的项目 spring-boot-serializations-producer:负责产生的Protobuf和json编码的数据。 默认情况下,该项目从端口8080开始,并公开2...Lombok-使用他的注释减少Java冗长 如何从本地

    WebSer之CXF框架例子.docx

    5. **服务实现**:实现服务接口,如`HelloWorldImpl`,使用`@WebService`注解指定服务的终结点、服务名和命名空间。在这里,实现服务接口中的方法逻辑。 6. **配置文件**:在Spring的配置文件中,定义CXF的bean,如...

    springboot后台管理练习模版

    SpringBoot后台管理练习模版是基于Spring Boot框架构建的一个实用模板,主要面向Java后端开发者,用于快速搭建后台管理系统。Spring Boot以其简化Spring应用初始搭建以及开发过程的特性,成为了现代Java开发的首选...

    SSM-GoodsManagerSystem.zip

    3. 商品 Service:封装业务逻辑,如添加商品、查询商品、更新库存等,通常使用Spring的@Service注解标记。 4. 商品 Controller:接收HTTP请求,调用Service处理业务,然后返回视图或者JSON响应,使用Spring的@...

    boot-websocket-study.rar

    在实际的WebSocket实现中,服务器端通常会使用Spring Framework的WebSocket API,例如`@ServerEndpoint`注解来标记WebSocket端点,`WebSocketSession`接口来处理客户端连接和消息传递。客户端则通过JavaScript的...

    cxf webservice

    5. **拦截器和终结点**:CXF允许自定义拦截器和终结点处理程序,为Web服务添加额外的功能和处理逻辑。 总的来说,CXF Webservice是开发者在Java环境中构建Web服务的强大工具,它集成了JAX-WS和JAX-RS,提供了丰富的...

    springboot-websocket:基于springboot的websocket示例demo

    1. **WebSocket配置**:在Spring Boot应用中,我们需要创建一个`WebSocketConfig`类,通过`@Configuration`和`@EnableWebSocket`注解启用WebSocket支持,并实现`WebSocketConfigurer`接口,重写`...

Global site tag (gtag.js) - Google Analytics