Spring

Spring是于2003年兴起的一个轻量级的Java开发框架;

特点:模块化;低侵入性;不重复造轮子,整合其他的框架。

架构图

Bean

Spring core:IOC容器, 解决对象创建及依赖关系,例如一个杯子,我们平常不需要知道它的制作过程,只是把它当作一个工具来使用。对bean的注册叫控制反转,对bean中参数的初始化叫依赖注入。

compareJava

spring

一切皆bean

java

一切皆对象

作用域

Prototype
为每一个bean请求提供一个实例。单例的模式由bean factory自身来维护。
Request
在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
Session
与请求范围类似确保每个用户session中有一个bean的实例,在session过期后,bean会随之失效。
Global-session
global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

注入方式

  • 构造器注入
  • Setter方法注入
  • 接口注入

setter方法注入的例子

DbHelper.java

public class DbHelper {
    public void add(){
        System.out.println("增加订单..");
    }
}

Order.java

public class Order {
//  private MysqlHelper helper = new MysqlHelper();
    private DbHelper helper;

    public void setHelper(DbHelper helper) {
        this.helper = helper;
    }

    public void addOrder() {
        this.helper.add();
    }
}

AOP

面向切面编程,弥补oop的不足;

步骤

  • 将一个类定义为切面(aspect)
  • 将类的方法定义为切入点(pointcut)@Pointcut("execution(* com.xyz.myapp.service.*.*(..))") // expression
  • 在连接点(Joint point)添加通知(around、before、after和throws等)

应用场景:日志记录,性能统计,安全控制,事务处理,异常处理等等。

注解

@Autowired与@Resource
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 
@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired() @Qualifier("baseDao") 
private BaseDao baseDao; 

@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

@Resource(name="baseDao") 
private BaseDao baseDao; 

@Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起来比较优雅。

 

posted @ 2018-08-05 22:08  cxbit  阅读(142)  评论(0编辑  收藏  举报