Spring框架——入门一
Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架
Spring框架核心
1. IoC 反转控制:一个对象依赖的其他对象会被动的方式传递过来,而不是这个对象自己创建或是查找依赖对象
作用:降低程序间耦合
2. AOP 面向切面编程
3. DI:依赖注入,IoC的一种体现。
Bean依赖注入方式:①构造方法 ②setter方法 ③注解
注入的数据类型:①简单数据类型 ②POJO ③复杂数据类型
4. Bean实例化三种方式:①空参构造 ②工厂方法 ③工厂静态方法
获取Bean三种方式:①getBean(byName) ②getBean(byType) ③getBean(byName,byType)
Spring框架——入门二
1. Spring注解开发:
① 原始注解:
@Component:实例化Bean对象
语义化注解
@Controller:同@Component,web层
@Service:同@Component,service层
@Repository:同@Component,dao层
@Value:注入普通属性, 也使用可以SqEL表达式进行数据的注入
@Autowired:byType 在字段(成员变量)上使用,根据字段数据类型进行依赖注入
@Qualifier:byName 在字段上使用时必须结合@Autowired使用,按照Bean在IoC容器中名称进行依赖注入
在方法参数出使用,可以对参数进行依赖注入
@Resource:jdk中提供的注解,jdk9及以上版本失效,作用同 @Autowired + @Qualifier
@Scope:Bean作用范围
@PostConstruct:初始化方法
@PreDestroy:销毁方法
② 新注解
@Configuration:指定当前类为核心配置类
@ComponentScan:指定扫描初始化容器扫描的包
@Import:导入其他配置类
@PropertySource:加载.properties配置文件,可以结合@Value
@Bean:在方法上使用可以将方法返回值放入IOC容器,可以结合@Qualifier对参数进行依赖注入
2. Spring整合Junit
相关注解:
@RunWith注解替换原来的运行期
@ContextConfiguration指定配置文件或配置类
@Autowired:byType 在字段(成员变量)上使用,根据字段数据类型进行依赖注入
步骤:
① 导入Spring集成Junit的坐标
② 使用@RunWith(SpringJUnit4ClassRunner.class)注解替代原来的运行期
③ 使用@ContextConfiguration("classpath:config.xml")指定配置文件,或核心配置类
若要加载其他配置文件如加载.properties配置文件,使用@PropertySource("classpath:xxx.properties")
④ 使用@Autowired注入测试对象
⑤ 创建测试方法
Spring框架——入门三
1. AOP:Spring核心之一,是OOP的扩展,面相切面编程
2. AOP相关术语:
① 连接点:有可能会被增强的方法成为连接点。
② 切入点:被增强的方法。
③ 通知:增强。
④ 织入:动词:切入点 + 切面对象结合
⑤ 切面对象:提供增强方法的类对象
3. AOP通知类型
① 前置通知
② 后置通知
③ 环绕通知
④ 异常抛出通知
⑤ 最终通知
4. AOP的xml配置步骤:
① 导入坐标 aspectJweaver(语言组织联盟,解析切入点表达式) & spring-context
② 创建目标接口、目标类和切面类
③ 在xml文件中配置目标类和切面类,也就是将对象创建权交给spring
④ 引入aop命名空间
⑤ 在xml文件中配置织入关系
<aop:config>
<!-- 配置切面对象 -->
<aop:aspect ref="切面类Bean标签id">
<!-- 织入:切点+通知 -->
<aop:通知类型 method="切面的方法名" pointcut="切点表达式"></aop:通知类型>
<aop:aspect>
<aop:config>
⑥ 测试
5. AOP的注解开发步骤:
① 创建目标接口、目标类和切面类
② 在目标类上加@Component注解
③ 在切面类上加@Component注解,@Aspect注解,声明当前类为切面
④ 在切面类使用注释配置织入关系:
@Before @AfterReturnning @AfterThrowing @Around @After(切入点表达式)
⑤ 创建核心配置类
@Configuration 声明当前类为核心配置类
@ComponentScan("com.xxx") 指定创建容器时扫描的包
@EnableAspectJAutoProxy 开启AOP注解支持/AOP自动代理
⑥ 测试
Spring框架——入门四
Spring-事务
1.声明式事务
——基于xml
1.1导入坐标:spring-tx
1.2在核心配置文件中声明事务管理器对象
<bean id="transactionManager" class="...DataSourceTransactionManager">
<!--需要设置一个数据源对象-->
<property name="dataSource" ref="dataSource"></property>
</bean>
1.3声明事务通知,配置事务属性:
①isolation:隔离级别(四种)
DEFAULT:根据数据库选择默认隔离级别
②propagation:传播行为(七种)
REQUIRED:默认值,有事务则使用事务,没有事务则创建一个新的事务
SUPPORTS:有事务则使用事务,没有事务则不使用事务,适用于查询功能
③read-only:只读,false关闭(默认)适用于增删改,true开启适用于查
④timeout:设置超时时间,默认-1,没有超时限制。如果有,以秒为单位进行设置
⑤rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常事务不回滚。没有默认值,不写时,任何异常都回滚
⑥no-rollback-for:用于指定一个异常,当执行产生该异常时,事务不回滚。产生其他异常事务回滚。没有默认值,不写时,任何异常都回滚
<!--通知 事务的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--事务 -->
<tx:method name="*" isolation="DEFAULT" propagation="SUPPORTS" read-only="false"/>
</tx:attributes>
</tx:advice>
1.4配置AOP,织入事务
<!--配置事务的aop织入-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast..*.*(..))"></aop:advisor>
</aop:config>
——基于注解(注解+xml配置)
1.1导入坐标:spring-tx
1.2在核心配置文件中声明事务管理器对象
<bean id="transactionManager" class="...DataSourceTransactionManager">
<!--需要设置一个数据源对象-->
<property name="dataSource" ref="dataSource"></property>
</bean>
1.3使用 @Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同xml配置方式,例如隔离级别、传播行为等。
1.4在xml配置文件中配置 组件扫描 和 事务注解驱动
<!—之前省略datsSour`_****_`ce、jdbcTemplate、平台事务管理器的配置-->
<!--组件扫描-->
<context:component-scan base-package="com.xxx"/>
<!--事务的注解驱动-->
<tx:annotation-driven/>
——纯注解
1.1导入坐标:spring-tx
1.2使用 @Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同xml配置方式,例如隔离级别、传播行为等。
1.3创建核心配置类
@Configuration指定当前类为核心配置类
@ComponentScan("cn.xxx")定义创建IoC容器时扫描的包
@EnableTransactionManagement在核心配置类上开启事务的注解驱动
2.编程式事务
通常不用