Spring

1.Spring注入方式

(1)构造方法注入。
(2)setter注入
(3)基于注解的注入

2.Bean的作用域

(1)singleton:指一个bean容器中只存在一份;
(2)prototype:每次请求创建新的实例,destroy方式不生效;
(3)request:每次http的请求都会创建一个实例且仅在当前request内有效;
(4)session:每次http请求创建,当前session内有效
(5)global session:基于portlet的web中有效(portlet定义了global session),如果是web中,同session。

3.Bean的生命周期

(1)定义
(2)初始化
两种实现:
①实现org.sprignframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法
②配置文件中配置init-method = “init”;init方法名
(3)使用
(4)销毁
两种实现:
①实现org.sprignframework.beans.factory.DisposableBean接口,覆盖destroy方法
②配置destroy-method=“clearup”;clearup方法名

4.Aware

(1)ApplicationContextAware
(2)BeanNameAware
spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应资源,通过Aware接口,可以对Spring相应资源进行操作(慎重),为对Spring进行简单的扩展提供了方便的入口。

5.Bean的自动装配

(1)No:不做任何操作
(2)byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。
(3)byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么是都不发生。
(4)Constructor:与byType方式类似,不同支持在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常。
IOC容器中,bean的id不能重复。

6.Bean注解

(1)@Required(不常用)
适用于bean属性的setter方法
这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或通过自动装配的一个明确的属性值。
(2)Autowired自动装配
①用于setter方法、成员变量或构造器上
②每个类只能有一个构造器被标记为required=true;
③可以使用@Autowired注解一些众所周知的解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResorceLoader,ApplicationEventPublisher,MessageSource.
④可以通过添加注解给需要该类型的数组的字段或方法,以提供ApplicationContext中的所有特定类型的bean;
可以用于装配key为String的Map
如果希望数组有序,可以让bean实现org.springframework.core.Ordered接口或使用的@Order注解,@Order(value=1)指定加载顺序,但只对数组类型有效。
⑤@Autowired是由Spring BeanPostProcessor处理的,所以不能再自己的BeanPostProcessor或BeanFactoryPostProcessor类型应用这些注解,这些注解必须通过XML或者Spring的Bean注解加载。
(3)@Qualifier
缩小范围
@Resource 适用于成员变量 一个参数的set方法,@Qualifier 使用于构造方法和多参数方法。
@Qualifier:一般和@Autowired一起使用,按类型自动注入时可能会有多个Bean实例的情况,可以使用@Qualifier注解缩小范围(或指定唯一)
(4)@Autowired @Qualifier @Resource

  • ①Spring在实现依赖注入(DI)时可以使用 @Autowired 或 @Resource 来实现Bean的自动装配(即自动满足Bean依赖,在Spring初始化bean之后)。
  • ②@Autowired(org.springframework.beans.factory.annotation.Autowired) 是 Spring 自带的注解;@Resource(javax.annotation.Resource) 是 J2EE 的注解。
  • ③ @Autowired 默认按照bean的类型进行匹配
    a.@Autowired 注解会去Spring容器中寻找类型为Human或Human子类的Bean,并注入到变量human中。
    如果匹配到多个结果则会抛出异常,因为它不知道该用哪个Bean。
    同样,如果一个也没有匹配到,也会抛出异常,因为 @Autowired 注解默认情况下要求依赖对象必须存在(从上面源码可以看到 required 属性值默认为 true)。如果想要允许null值,可以设置它的 required 属性为 false。
    在这里插入图片描述
    b.@Resource 默认按照bean名称进行bean匹配
    上述示例中,@Resource 注解会去Spring容器中寻找名称(即id)为 “human” 的Bean,并注入到变量human中。
    如果按照bean名称没有匹配到Bean,则退一步再按照bean类型(Human或Human子类)进行匹配;如果没有匹配到或匹配到多个则抛出异常。
    在这里插入图片描述
    可以指定,类型,
    在这里插入图片描述
    或指定类型和名称:
    在这里插入图片描述
    @Resource 注解不能用在类构造器上
    @Resource 注解可以用在普通方法上
    @Resource 注解可以用在 setter 方法或其他普通方法上。

    (5)@Bean
    @Bean标识一个用于配置和初始化一个由SpringIoC容器管理的新对象的方法,类似于XML配置文件的bean标签。可以在spring的@Component注解的类中使用@Bean注解任何方法(仅仅是可以),通常用的是@Configuration
    接受生命周期的回调,如下:
public class Foo {
    public void init() {
        // initialization logic
    }
}

public class Bar {
    public void cleanup() {
        // destruction logic
    }
}

@Configuration
public class AppConfig {

    @Bean(initMethod = "init")
    public Foo foo() {
        return new Foo();
    }

    @Bean(destroyMethod = "cleanup")
    public Bar bar() {
        return new Bar();
    }

}

(6) @Value
引用资源文件中的内容
给属性注入需要的值,注入表达式,其他Bean属性,注入资源文件、配置文件等。
@value("I Love You!")注入字符串
@value("http://www.baidu.com")注入网址

7.AOP

(1)什么是AOP
Aspect Oriented Programming的缩写,意味,面向切面编程。
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
主要功能应用:日志记录,性能统计,安全控制,事务处理,异常处理等
(2)aspect 与 pointcut配置
(3)Advice
(4)Introduction

8.Spring有几个模块

(1)Spring Core:核心类库,提供IOC服务
(2)Spring Context:提供框架式的Bean访问、以及企业级功能(JNDI、定时任务等)
(3)Spring AOP : AOP服务
(4)Spring DAO:对JDBC的抽象、简化了数据访问异常的处理
(5)Spring ORM:实现了对ORM框架的支持
(6)Spring Web:提供了基本的Web综合特性,例如多方文件上传
(7)Spring MVC :提供了面向Web应用的MVC实现

9.Spring优点

(1)非侵入式设计
Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。
(2)方便解耦、简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。
(3)支持AOP
Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。
(4)支持声明式事务处理
只需要通过配置就可以完成对事物的管理,而无须手动编程。
(5)方便程序的测试
Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。
(6)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。
(7)降低Jave EE API的使用难度。
Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

9.Spring声明式事务与编程式事务

(1)编程式事务需要你在代码中直接加入处理事务的逻辑,可能需要在代码中显式调用beginTransaction()、commit()、rollback()等事务管理相关的方法,如在执行a方法时候需要事务处理,你需要在a方法开始时候开启事务,处理完后。在方法结束时候,关闭事务.
(2)声明式的事务的做法是在a方法外围添加注解或者直接在配置文件中定义,a方法需要事务处理,在spring中会通过配置文件在a方法前后拦截,并添加事务.
(3)二者区别.编程式事务侵入性比较强,但处理粒度更细.

  • 总结:spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解@Transactional,无需任何配置,代码入侵较小,使用AOP原理,推荐使用声明式事务,在应用启动类上记得加上@EnableTransactionManagement注解。
10.为什么使用SpringIoc而不使用new实例化对象

1.增加耦合,会访问到内部属性
2.更新的地方比较多,难于维护

11.过滤器与拦截器区别

(1)过滤器:它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。一般在web.xml中配置,并设置字符编码
(2)拦截器:它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
拦截器的配置一般在SpringMVC的配置文件中,使用Interceptors标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值