Spring框架

Spring是一个开源框架,为解决企业级应用程序开发复杂性而创建的。

Spring以IOC、AOP为主要思想构建JavaEE框架

IOC容器(Inversion of Control ):控制反转,控制权从应用程序转移到框架,是框架共有特性。

IOC容器的特点:

无需主动new对象;而是描述对象应该如何被创建即可,IoC容器帮你创建,即被动实例化;

不需要主动装配对象之间的依赖关系,而是描述需要哪个服务(组件),IoC容器会帮你装配(即负责将它们 关联在一起),被动接受装配;

迪米特法则(最少知识原则):不知道依赖的具体实现,只知道需要提供某类服务的对象(面向抽象编 程),松散耦合,一个对象应当对其它对象有尽可能少的了解;

IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。
DI( Dependency Injection ):依赖注入用一个单独的对象(装配器)来装配对象之间的依赖关系 。 

DI优点:

帮你看清组件之间的依赖关系,只需要观察依赖注入的机制(setter/构造器),就可以掌握整个依赖(类与 类之间的关系)。

组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建一个灵活、 可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资 源,完成自身的业务逻辑,而不用关心具体的资源来自何处、由谁实现。

1.添加Spring依赖

2.编写一个简单的类

3.在配置文件中描述该类

4.启动容器,并从容器里拿到Bean。

5.拿到对象之后,调用方法的结果:

 

下图表示Spring容器,Bean的配置信息,Bean的实现类以及应用程序的关系

1.Bean的实例化

2.1构造方法实例化

上述helloSpring就是用构造方法实例化的Bean,默认有一个构造方法

2.2静态工厂方法实例化

利用了工厂设计模式,通过一个标识,创建一个实例对象。

2.3实例化工厂

容器再启动的时候就已经实例化好了对象

2.Bean的依赖配置

2.1依赖装配方式

按构造函数的参数类型以及构造方法的参数顺序自动装配。

这意味着,如果一个bean的数据类型与其它bean的构造器参数的数据类型是相同的,那么将自动装配。

当然 如果装配过程中构造方法的参数具有歧义的时候,就需要我们指定类型,位置或者参数名的方式来告知Spring如何装配。

通过Bean的引用

在Spring容器中有某个Bean的构造函数的参数类型,可以将其装配其中

通过参数类型

通过参数位置

通过参数名称

通过Setter方法装配

2.2依赖和配置详解

idref只将某个字符串配置到属性或者构造函数中

ref是将目标Bean定义的实例装配到属性或构造函数中

2.3Collection

2.4null和空字符串

2.5延迟初始化

Spring默认容器启动时将所有的Bean都初始化完成,设置延时初始化时告诉容器在第一次使用Bean的时候,完成初始化操作,而不是启动时。

3.Bean的作用域

singleton:该作用域下的Bean在IOC容器只存在一个实例,所有对象对其的引用都返回同一个

prototype:每次对该作用域下的Bean的请求都会创建新的实例

reuqest:每次Http请求会创建新的Bean实例

Session:在一个http Session中,定义一个Bean实例

application session :在一个http session Context 中,定义一个Bean实例。

4.基于注解配置

基于注解配置的时候需要在XML文件中配置:<context:component-scan/>来告诉Spring容器开启注解Bean的扫描

用来标识为一个Bean

@Component,@Repository(用户DAO实现了进行标识),@Serivce(用于Service实现类进行标识),@Controller(用于Controller实现类进行标识)

@Autowired自动装配:@Autowired默认是按类型 (byType)匹配的方式在容器中查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。,如果容器中没有找到和标注变量类型匹配的Bean,那么Spring容器启 动时将报 NoSuchBeanDefinitionException 异常。如果希望Spring即使找不到匹配的Bean完成注入时也不要抛 出异常,那么可以使用 @Autowired(required=false) 进行标注。 

@Qualifier注入指定Bean

 @Scope(作用域), @PostConstruct(创建好Bean后需要做的事儿), @PreDestroy(销毁Bean之前需要做的事儿) 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值