Spring
- Spring-core: IoC、依赖注入
- Spring-beans:工厂模式微妙实现、移除了编码式单例需要,把配置和依赖从实际编码逻辑中解耦
- Context: core、bean模块基础上建立。ApplicationContext接口是Context模块焦点
- Spring-expression: 强大表达式语言
Spring-IoC: Inverse of Control 控制反转
- IOC容器具有依赖注入的功能,可创建对象,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象之间的依赖
- POJO: plain ordinary java object
- BeanFactory容器:最简单,移动设备或者applet适用,最常用XMLBeanFactory
- AppliacationContext容器:添加了更多企业特定功能、较高级,常用接口实现:
FileSystemXmlApplicationContext:需提供xml完整路径
ClassPathXmlApplicationContext:从 CLASSPATH 中搜索 bean 配置文件
WebXmlApplicationContext:web 应用程序的范围内加载在 XML 文件中已被定义的 bean - SpringBean的定义:基于XML配置文件、基于注解、基于Java配置
- Bean Scope作用域:
singleton (默认) 容器仅存在一个Bean实例;
prototype 每次调用,都返回一个新实例;
request 每次http请求都会创建新bean;
session 同session共享bean; global-session
Spring Bean生命周期:定义-> 初始化 –> 使用 -> 销毁
- 初始化,声明inti-method; 销毁,声明destroy-method
- 框架使用元素default-init-method、default-destroy-method, 为多个bean提供初始化和销毁方法
- Spring Bean后置处理器:ApplicationContext 会自动检测由 BeanPostProcessor 接口的实现定义的 bean,注册这些 bean 为后置处理器,然后通过在容器中创建 bean,在适当的时候调用它
- Spring Bean 定义继承 parent = ***,如果加上定义abstract="true",它仅仅作为一个纯粹的模板,充当自定义的父定义使用
Spring依赖注入:
- 基于构造函数的依赖注入:
<constructor-arg ref="spellChecker"/>
当参数不止一个时,按照顺序传递
使用 type 属性显式的指定了构造函数参数的类型,容器也可以使用与简单类型匹配的类型
<constructor-arg type="int" value="2001"/>
<constructor-arg type="java.lang.String" value="Zara"/>
使用 index 属性来显式的指定构造函数参数的索引
<constructor-arg index="0" value="2001"/>
<constructor-arg index="1" value="Zara"/> - 基于设值函数的依赖注入:
<property name="spellChecker" ref="spellChecker"/>
p-namespace 以一种更简洁的方式重写
p:name="John Doe" p:spouse-ref="jane" - Spring 注入内部Beans:
<bean id="outerBean" class="...">
<property name="target">
<bean id="innerBean" class="..."/>
</property> </bean> - Spring 注入集合:<list> <set> <map> <props>
注入空字符串:<property name="email" value=""/>
注入NULL: <property name="email"><null/></property>
Spring自动装配 autowire属性
- ByName:autowire=" ByName "
- ByType:autowire=" ByType "
- 由构造函数自动装配:autowire="constructor"
Spring基于注解的配置:<context:annotation-config/>
- @Required应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常
- @Autowired可以在 setter 方法中/或者属性中/构造函数中被用于自动连接 bean, 当 Spring遇到一个在 setter 方法中使用的 @Autowired 注释,它会在方法中视图执行 byType 自动连接。
@Autowired 的(required=false)选项,关闭默认行为,不传也不报错 - @Qualifier 当有多个类型相同的bean时,通过这个注解过滤
- Spring JSR-250 注释:@PostConstruct 初始化、 @PreDestroy注销、@Resource使用一个 ‘name’ 属性,该属性以一个 bean 名称的形式被注入。你可以说,它遵循 by-name 自动连接语义
- 基于Java的配置:
@Configuration @Bean
ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
@import 注解允许从另一个配置类中加载 @Bean 定义
@Scope 指定范围
Spring 框架的AOP:
跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等
Spring JDBC框架:
- JdbcTemplate 类
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/TEST"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
jdbcTemplateObject = new JdbcTemplate(dataSource)
- NamedParameterJdbcTemplate 类
- SimpleJdbcTemplate 类
- SimpleJdbcCall 可以被用于调用一个包含 IN 和 OUT 参数的存储过程
事务特性
ACID: Atom Consistency Isolation Duration
MVC:Model 数据; View 视图; Control 业务逻辑、返回对应view
网友评论