0%

@AspectJ注解于类名上来声明这个类是一个切面类

AspectJ 简介

  • AspectJ是一个基于Java语言的AOP框架
  • Spring2.0以后新增了对AspectJ切点表达式支持
  • @AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面
  • 新版本Spring框架,建议使用AspectJ方式来开发AOP
  • 使用AspectJ 需要导入Spring AOP和 AspectJ相关jar包
    • spring-aop-4.2.4.RELEASE.jar
    • com.springsource.org.aopalliance-1.0.0.jar
    • spring-aspects-4.2.4.RELEASE.jar
    • com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
      阅读全文 »

各组件介绍

  • DispatcherServlet:

    • 作为MVC前端控制器
  • Handler:

    • DispatcherServlet调用Controller层的中间过度对象

      DispatcherServlet内部使用的一个类,是Controller的一个表现形式,SpringMVC没有Controller的接口,DispatcherServlet中调用的Controller是以Handler形式出现的

  • HandlerAdapter:

    • Handler适配器
阅读全文 »

MVC是一种架构模式

  • 程序分层,分工合作,既相互独立,又协同工作。

MVC是一种思考方式

  • 需要将什么信息展示给用户?如何布局?调用哪些业务逻辑?

MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

Model:模型层 片面说就是实体类,业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体的组合。
View:视图层 为用户提供UI,重点关注数据的呈现
Controller:控制层 调用业务逻辑产生合适的数据(Model) 传递数据给视图层用于呈现

阅读全文 »

如果有这样一个需求,为一个已知的API添加一个新的功能

由于是已知的API,我们不能修改其类,只能通过外部包装。但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义的接口,这个接口包含了想要添加的方法。

但是Java不是一门动态的语言,无法再编译后动态添加新的功能,这个时候就可以使用 <aop:declare-parents> 来做了。

阅读全文 »

  • schema-defined aspects只支持singleton model,即:所有基于配置文件的切面只支持单例模式
  • Spring所有的切面和通知器都必须放在一个<aop:config>内(可以配置包含多个<aop:config>元素),每一个<aop:config>可以包含pointcutadvisoraspect元素(必须按照以上顺序进行声明)
  • <aop:config>风格的配置大量使用了Spring的自动代理机制
    阅读全文 »

AOP

  • Aspect Oriented Programming 的缩写,意为:面向切面编程,通过 预编译方式 和 运行期动态代理 实现程序功能的统一维护的一种技术

  • 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等

阅读全文 »

  • 从Spring3.0开始支持JSR330标准注解(依赖注入注解),其扫描方式与Spring注解一致

  • Spring自带的@Autowired的缺省情况等价于JSR-330的@Inject注解;

  • Spring自带的@Qualifier的缺省的根据Bean名字注入情况等价于JSR-330的@Named注解;

  • Spring自带的@Qualifier的扩展@Qualifier限定描述符注解情况等价于JSR-330的@Qualifier注解。

    阅读全文 »

使用 @ImportResource 和 @Value 进行资源文件读取

1
2
3
db.url = 127.0.0.1
db.username = root
db.password = pwword

注意:读取properties文件中的数据时,若所在系统环境中有重名的环境变量与propertieskey值相同,那么其值会被系统变量中的值所覆盖,这样会导致错误,所以我们一般将 本为urlkey改写为db.url,即加上特殊前缀,以防止重命冲突情况的发生。

阅读全文 »