默认是单例的。最佳使用:不要在controller中定义成员变量。
优点:高性能,单例不用每次都new,当然快了缺点:单例是不安全的,会导致属性重复使用。(1)AOP 面向切面编程,让一些公共服务(日志、持久性事务等)可以分解成方面并应用到域对象上,但又不会增加对象模型的复杂性。
(2)IOC 控制反转,允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。 这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
spring提供了几个关于事务处理的
依赖注入DI在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
BeanFactory:产生一个新的实例,可以实现单例模式
BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并 且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不 是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的 业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们 并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
有两种方式初始化Bean。
在配置文档中通过指定init-method 属性来完成在Bean的类中实现一个初始化Bean属性的方法,如init(),如: }
然后,在配置文件中设置init-mothod属性:
<bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”init-mothod=”init” >
</bean>
实现 InitializingBean接口 Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:public class HelloWorld implement InitializingBean {
public void afterPropertiesSet() {
}
也就是,spring boot在启动时,按照约定读spring boot starter的配置信息,根据配置信息初始化资源。
main方法中加入@SpringBootApplication或者@EnableAutoConfigration注解,会自动的去starter包下读spring.factories配置文件。这个配置文件里记录了需要被创建的bean。spring boot 在启动时会扫描项目所依赖的jar包,寻找包含spring.factories文件的jar。根据spring.factories配置加载autoConfigration类,根据@conditional注解 进行自动配置并把bean导致到spring Context中。