赞
踩
目录
事务实现类(PlatformTransactionManager接口)
#白话:
- Spring容器在内部封装对象,省去get、set、构造方法人力写封装代码,引用封装对象
- IOC容器底层就是对象工厂
- <property name="属性名">
- <array>
- <value>注入值</value>
- </array>
- </property>
- <property name="属性名">
- <list>
- <value>注入值</value>
- </list>
- </property>
- <property name="属性名">
- <map>
- <entry key="键名" value="值"></entry>
- </map>
- </property>
- <property name="属性名">
- <set>
- <value>注入值</value>
- </set>
- </property>
-
- <!--集合属性注入对象类型值-->
- <property name="集合属性名">
- <list>
- <ref bean="#{id}">
- </list>
- </property>
-
-
- <!--集合值提取注入集合-->
- <!--引入新命名空间util-->
- <util:list id="集合ID">
- <value>属性值</value>
- </util:list>
-
- <bean id=" " class="类全路径">
- <property name="集合属性" ref="集合ID"></property>
- </bean>
- xmlns:p="http://www.springframework.org/schema/p"
-
- <bean id=" “ class=” “ p:name=" "></bean>
单例singletion //只创建一次对象,在加载配置文件时创建
多例prototype //每次使用getBean方法,就创建一次对象
创建新类,继承FactoryBean接口(类的泛型<T>),重写接口的方法
<context:property-placeholder location="名称.properties" />
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <porperty name="driverClassName" value="${prop.driverClassName}"></property>
- <porperty name="url" value="${prop.url}"></property>
- <porperty name="username" value="${prop.username}"></property>
- <porperty name="password" value="${prop.password}"></property>
- </bean>
<contexxt:component-scan base-packages="包名全路径" ></context:component-scan>
- @Configuration
- @ComponentScan(basePackage="包名路径")
- public class SpringConfig{}
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
#白话
在不更改原有功能模块代码的前提下,实现添加新的功能模块
Spring框架基于AspectJ实现AOP操作,AspectJ不是Spring框架组成部分,独立存在,一般Spring框架进行AOP操作,需要与AspectJ联用
语法结构:execution([权限修饰符][返回类型][类全限定名][方法名]([参数列表]))
类名、方法名:可以使用 “ * ”代替,表示包下所有类、方法的都可以被增强
参数列表: ”..“,表示参数值
- <aop:config>
- <!--切入点-->
- <aop:pointcut id="pcut" expression="被增强类切入点表达式" />
- <!--切面-->
- <aop:aspect ref="增强类id">
- <aop:before method="增强类方法名" pointcut-ref="pcut" >
- </aop:aspect>
- </aop:config>
- <context:component-scan base-packages="包的路径"></context:component-scan>
- <!--开启生成代理对象-->
- <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
- //环绕通知
- public void around(ProceedingJoinPoint proceedingJoinPoint ) throws Throwable{
- System.out.println("之前。。。。");
- //被增强的方法执行
- proceedingJoinPoint.proceed();
- System.out.println("之后。。。。");
- }
- @Pointcut(value="execution(* com.atguigu.spring5.aopanno.User.add(..))");
- public void pointDemo(){ }
-
- //通知类型注解
- @Before(value="pointDemo()")
- @Configuration
- @ComponentScan(basePackage="包路径") //注解扫描功能
- @EnableAspectJAutoProxy(proxyTargetClass=true) //开启生成代理对象
- public class SpringConfig{}
- <bean id="dataSource" class="com.alibaba.Druid.pool.DruidDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
- <property name="url" value="jdbc:mysql://localhost:3306/DB"></property>
- <property name="username" value="root"></property>
- <property name="password" value="root"></property>
- </bean>
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- @Configuration
- @ComponentScan(basePacckage="包路径")
- public class SpringConfig{
- @Bean
- public DruidDataSource getDruidDataSource(){
- DruidDataSource dataSource = new DruidDataSource();
- dataSourcce.setDriverClassName("com.mysql.jdbc.Driver");
- dataSourcce.setUrl("jdbc:mysql://localhost:3306/DB");
- dataSourcce.setUsername("root");
- dataSourcce.setPaawword("root");
- return dataSource;
- }
- }
持久层注入JdbcTtemplate对象
- public class Dao{
- @Autowired
- private JdbcTemplate jdcTemplate;
- }
事务一般添加在业务逻辑层(service层)
- <!--创建事务管理器-->
- <bean id="dataSource" class="org.springframework.jdbc.dataSource.DataSourceTransactionmanager">
- <!--注入数据源-->
- <property name="dataSource" ref="dataSource">
- </bean>
- <tx:advice id="advice">
- <!--配置事务参数-->
- <tx:attributes>
- <!--指定哪个方法添加事务-->
- <tx:method name="添加事务类中的方法名" propagation="传播行为值" />
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <!--切入点-->
- <aop:pointcut id="pcut" expression="切入点表达式" />
- <!--切面-->
- <aop:advisor advice-ref="advice" pointcut-ref="pcut" ></aop:advisor>
- </aop:config>
- <bean id="transactionManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
<tx:annotation-driven transaction-manager="transactionmanager"></tx:annotation-driven>
- @Configuration //配置类
- @ComponentScan(basePackage="包路径") //开启注解扫描组件
- @EnableTransactionManagement //开启事务管理器
- public class SpringConfig{
-
- //创建数据库连接池
- @Bean
- public DruidDataSource getDruidDataSource(){
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setDriverClassName("com.mysql.jdbc.Driver");
- dataSource.setUrl("jdbc:mysql://localhost:3306/DB");
- dataSource.setUsername("root");
- dataSource.setPassword("root");
- return dataSource;
- }
-
- //创建JdbcTemplate对象
- @Bean
- public JdbcTemplate getJdbcTemplate(DataSource dataSource){
- JdbcTemplate jdbcTemplate = new JdbcTemplate();
- jdbcTemplate.setDataSource(dataSource);
- return jdbcTemplate;
- }
-
- //创建TransactionManager事务管理器
- @Bean
- public DataSourceTransactonManager getDataSourceTransactionManager(DataSource dataSource){
- DataSourceTransactionManager transactionManager = new DataTransactionManager();
- transactionManager.setDataSource(dataSource);
- return transactionManager;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。