SpringBoot配置类

SpringBoot配置类

1、spring中xml配置

			<!--配置数据源-->
			<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
				<!--这里面的name值是数据源中的set的内容-->
			    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
			    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/kc_db01"></property>
			    <property name="user" value="root"></property>
			    <property name="password" value="123456"></property>
			</bean>
			
			<!--配置平台事务管理器-->
			<bean id="transactionManager" class="org.springframwork.jdbc.datasource.DataSourceTransactionManager">
				<property name="dataSource" ref="dataSource"/>
			</bean>
			
			<!--配置Spring提供好的Advice-->
			<tx:advice id="" transaction="">
				<tx:attributes>
					<!--
						配置不同的方法的事务属性
						name:方法名称 *代表通配符 添加操作addUser、addAccout可以用add*代替
						isolation:事务的隔离级别,解决事务并发问题(脏读、幻读、不可重复读)
						timeout:超时时间 默认-1 单位秒
						read-only:是否只读,查询操作设置为只读
						propagation:事务的传播行为,解决事务方法调用事务方法问题(事务嵌套问题)
					-->
					<tx:method name="transferMoney" isolation="READ_COMMITTED" propagation="REQUIRED" timeout="3" read-only="false"/>
					<tx:method name="regisAccount"/>
					<tx:method name="add*"/>
					<tx:method name="update*"/>
					<tx:method name="delete*"/>
					<tx:method name="select*"/>
					<tx:method name="*"/>
				</tx:attributes>
			</tx:advice>
			
			<!--事务增强aop-->
			<aop:config>
				<!--配置切入点表达式-->
				<!--
					execution(返回类型(第一个*号表示所有的类型 空格 包名(所属类的包名) 第二个*号(表示包名下边的所有类) *(..)*号表示该类所有方法,(..)表示所有参数类型)
				-->
				<aop:pointcut id="txPointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/>
				<!--配置织入关系 通知advice-ref引入spring提供好的-->
				<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
			</aop:config>
			
			<!--事务的自动代理(开启注解@Transaction-->
			<tx:annotation-driven/>

2、SpringBoot配置类

	@Configuration//配置类注解
	@ComponentScan("com.itheima")//自动装配和组件扫描
	@PropertySource("classpath:jdbc.properties")//加载配置文件
	@MapperScan("com.itheima.mapper")//扫描mapper文件
	@EnableTransactionManagement//事务的自动代理开启注解@Transaction
	public class SpringConfig{
		
		//配置数据源
		@Bean
		public DataSource dataSource(
			@Value("${jdbc.driver}")String driver,
			@Value("${jdbc.url}")String url,
			@Value("${jdbc.username}")String username,
			@Value("${jdbc.password}")String password
		){
			DruidDataSource dataSource = new DruidDataSource();
			dataSource.setDriverClassName(driver);
			dataSource.setUrl(url);
			dataSource.setUsername(username);
			dataSource.setPassword(password);
			return dataSource;
		}
		
		//配置数据源工厂
		@Bean
		public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
			SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
			sqlSessionFactoryBean.setDataSource(dataSource);
			return sqlSessionFactoryBean;
		}
	
		//配置事务管理器
		public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
			DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
			transactionManager.setDataSource(dataSource);
			return transactionManager;
		}
		
	}

3、测试类

	public static void main(String[] args){
		//springxml形式配置
		ApplicationContext app = new ClassPathXmlApplicationContext("applicationConfig.xml");
		//springboot配置类形式
		ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class);
		AccountService accountService = app.getBean(AccountService.class);
		accountService.transFerMoney("tom","lucy",500)

	}

4、SpringBoot常用注解

	1@SpringBootApplication
		1@SpringBootApplication注解是SpringBoot中的核心注解,他是一个复合型注解,包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan这三个注解
		2SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并将当前类中声明的所有以@Bean注解标记的方法实例化到spring容器中,实例名就是方法名。让我们再也不用注册文件,只需要再配置类上加上注解,在方法名上加上@bean注解,就可以自动注册
		3EnableAutoConfiguration:是自动配置注解,这个注解会根据添加的组件jar来完成一些默认配置,我们做微服务是会添加spring-boot-starter-web这个组件jar的pom依赖,这个配置会默认配置springmvc和tomcat
		4ComponentScan:扫描当前包下的子包被@Component@Controller@Service@Repository注解标记的类实例化到spring容器中进行管理,等价于<context:component-scan>(自动扫描注解)的xml配置文件中的配置项
	2ServletComponentScan
		ServletFilterListener可以直接通过@WebServlet@WebFilter@WebListener注解自动注册这样通过注解servlet,拦截器,监听器的功能而无需其他配置
	3@MapperScan
		SpringBoot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。它和@Mapper注解是一样的作用,不通的地方是扫描入口不一样。@Mapper需要加在每个mapper接口类上面。所以大多数情况,都是再规划好工程目录之后,通过@MapperScan注解配置路径完成mapper接口的注入
	4@ImportResource@Import@Propertysource
		这三个注解属于资源导入注解,用来导入自定义的一些配置文件。
		@ImportResource(locations={}):用于导入其他xml配置文件,需要标注在主配置类上。
		@PropertySource:用于导入property的配置文件指定文件路径,相当于使用spring的<importresource/>
		@Import注解是一个可以将普通类导入spring容器中管理
	5@Controller
		表示是一个控制层,和RequestMapping来配合使用拦截请求,这样请求会在完成后转向一个视图解析器。但是在大多是微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回json数据的话,要配合@ResponseBody注解来完成
		@RestController@Controller@ResponseBody的结合,一个类被加上@RestController注解,数据接口中就不在需要添加@ResponseBody。更加简洁
	6@Service
		表示业务层,我们会将业务逻辑处理的类都加上这个注解交给spring容器,事务的切面也会配置在这一层。当然,这个注解不是一定要用。有了泛指组件的注解,当我们不能确定具体作用的时候,可以用泛指组件的注解托付给spring容器
	7Resource
		@Resource@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。@Resource注解不是spring提供的,是数据J2EE规范的注解。
		这俩个注解的区别就是匹配方式上不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配
	8@Repository
		@Repository注解类作为DAO对象,管理操作数据库的对象
		总的来说,@Component@Service@Controller@Repository都是spring注解,注解后可以被spring框架锁扫描并注入到spring容器来进行管理
		其中@Component是通用注解,其他三个注解是这个注解的拓展,并具有了特定的功能。
		通过这个注解的分出管理,就能将请求处理,业务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发
		所以日常开发汇总,如果能用@Service@Controller@Repository其中一个标注这个类的定位的时候,就不要用@Component来标注
	9@Transactional
		通过这个注解可以声明事务,可以添加在类上或者方法上
		在SpringBoot中不用再单独配置事务管理,一般情况是我们会在service层添加事务注解,即可开启事务,加上这个注解,如果发生unchecked excpetion,就会发生回滚
		@Transaction只能被应用到public方法上,对于其他非public的方法,如果标记@Transaction也不会报错,但事务会失效
		
		
	
		
	
	

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值