Spring手记

spring第二天反思与总结

作用在类上面使用component,但是根据分层思想,
web层使用@controller
service使用@service
dao层使用repository

以上注解作用跟<bean>标签作用相同,都是用来在ioc中创建对象

依赖注入注解方式:
autowired自动注入,如果ioc容器中有单一匹配的对象,就可以注入成功
如果ioc容器中有多个对象,需要使用Qualifier指定对象 的名字,注意的是,Qualifier
不可以单独使用,如果想要直接进行依赖注入,可以使用resource进行注入,
resource可以单独使用

junit与spring整合:

首先改变junit的运行环境使用注解@RunWith(SpringJUnit4ClassRunner.classs
加载核心配置类使用注解:@ContextConfiguration(class=核心类名.class)(直接写,不是字符串的形式)

核心类编写:
先指定为该类为核心类,使用@Configuration
根据需要引入外部的propertis文件使用:@propertysourec("classpath:名称")
引入其他配置类使用@improt(类名.class)
定义包扫描:@componentScan("com.itheima")

如果给变量注入值,可以使用spring'的el表达式${}并且使用@value,只能对基本数据类型和String注入

@Bean("名字")标签作用是把当前方法的返回值以指定的名字存入到spring的ioc容器中


-----------------------------------------------

day03
对于动态代理的理解
jdk提供的 被代理类必须要实现一个接口
cglib提供的子类,不需要继承接口,但是被代理对象不能是最终类
基于标签配置aop
基于注解配置aop
@Aspact 用于定义切面,通知与切面结合
5个注解    
@Around环绕 手写逻辑
@before @ afterrunning @aftertrowing @ after
@pointcut 用于定义切入点,也就是真正被增强的方法


----------------------------------------------------
day04

spring声明式事务管理
xml配置
配置事务管理器
配置事务的通知引用事务管理器
配置事务的属性配置事务的属性
isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。
propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。
read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写。
timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。
rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。
no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。没有默认值。表示任何异常都回滚。
-->

在配置的时候,先进行对象的注入,在配置事务的时候,首先进行事务管理的声明,
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> 
然后配置事务的引用通知的管理器
<tx:advice id ="txManger" transaction-manager="transactionManager">
在里面配置管理的一些属性
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="false"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

配置切面
在切面中配置切入点,和切入点表达式和事务通知之间的关系
<!--配置aop切面-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"/>
<!--建立切入点表达式与事务通知之间的关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>

基于注解配置spring中的事务

配置一个核心配置类
@Configuration
@ComponentScan("com.itheima")
@PropertySource(value = "jdbc.properties")
@Import({JdbcConfig.class,TransactionManager.class})
@EnableTransactionManagement
public class SpringConfiguration {

}
配置开启事务管理声明
public class TransactionManager {
/*
*开启spring的事务管理器
* */
@Bean("transactionManager")
public PlatformTransactionManager creatTransactionManager(DataSource dataSource ){
return new DataSourceTransactionManager(dataSource);
}
}

配置jdbc文件类

public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;

@Bean("jdbcTemplate")
public JdbcTemplate creatTemplate(DataSource dataSource) {
return new JdbcTemplate();
}

@Bean("dataSource")
public DataSource creatDataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}

 

猜你喜欢

转载自www.cnblogs.com/aniymx/p/9971370.html