1、xml
一、< bean>创建对象
<bean> 标签: 属性:id指定放入容器中的名字 class: 指定类 id+class -->默认构造函数 class+ factory-method --> 该类的静态方法,创建bean factory-bean +factory-method -->调用容器类的方法 scope 指定作用范围 init-method 指定类中初始化方法 destroy-method 指定类中,对象销毁时,执行的方法
二、 bean的依赖注入,bean 的子标签
1、<constructor-arg>标签: 使用有参构造函数,用该标签指定每一个值 属性: type: 指定传入参数类型 index:指定第几个参数 name: 指定参数的名称(前三个属性,都是定位参数的,一般只用name) value:指定值 ref: 指定容器中的类,为该值 2、<property>标签:指定使用set方法赋值 属性: name属性:指定使用的set方法(除set后面的内容,且第一个字母小写) value属性:指定值 ref属性 :指定容器中的类,为该值 3、注入集合的标签: 用于给List注入的:<list> <set> <array> 用于给map注入的: <map> <props> 这些标签,写在<constructor-arg>或者<property>下面(给其指定的属性赋值) (1)在<list> <array> <set>,直接写多个<value>,value标签内部写值 (2)在 <map> 使用 <entry key="map的键" value="map的值"/> 或 <entry key="map的键"> <value>map的值</value> </entry> (3)在 <props> 标签中,使用 <prop key="键">值</prop>
三、扫描包、各种支持
当使用注解的方式注入bean,指定扫描的包位置 <context:component-scan base-package="要扫描的包位置" /> 开启spring对注解aop支持 <aop:aspectj-autoproxy/> 开启注解支持事务- <tx:annotation-driven transaction-manager="容器中配置的事务管理器"/> 引入外部property配置文件 <context:property-placeholder location="classpath:配置文件"/>
四、AOP相关配置
1、 <aop:config>为aop配置的总标签,下面可以配置: 多个<aop:aspect/>、<aop:advisor/>、<aop:pointcut/> 2、<aop:aspect/>切面标签: 该标签指定切面类,并指定哪些方法配置到什么类上 属性: id:切面的唯一标识 red:指定容器中的切面类 3、五种常用的通知标签: <aop:before />、<aop:after-returning/>、 <aop:after-throwing />、<aop:after/> <aop:around /> 这些标签在<aop:aspect/>切面标签内部 指定该切面类中的什么方式为什么通知,并指定通知谁 属性: method: 指定前面类的方法 pointcut:指定切入点表达式,对哪个方法增强 pointcut-ref:指定<aop:pointcut/>标签配置切入点
五、声明式事务
1、配置事务管理器的Bean对象,并且注入数据源 <bean id="名称"class="事务管理器"> <!--注入数据源--> <property name="dataSource" ref="dataSource"/> </bean> (事务管理器spring提供了3中,DataSourceTransactionManager常用) 2、配置 事务通知 并且 配置事务的属性 使用 <tx:advice id="事务通知ID" transaction-manager="事务管理器"/> 标签 (1)属性: id属性: 事务通知的唯一标标志 transaction-manager属性: 指定容器中的事务管理器 (2)在该标签的内部配置事务的属性 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 配置事务的属性 --> <tx:attributes> <!--配置属性 --> <!-- 当使用aop指定要使用事务的方法时--> <!--会在下面几个标签中那个name符合这个方法--> <!-- name指定增删改等等方法,可以使用*当通配符--> <tx:method name="配置的方法名1" isolation="值" propagation="值"/> <tx:method name="配置的方法名2" isolation="值" propagation="值"/> </tx:attributes> </tx:advice> (3)事务都有什么可以属性??(tx:method标签属性) name属性: 属性作用到什么的方法名上( * 表示全部 find* 查询方法上面(通配分隔)) isolation属性: 用于指定事务的隔离级别,默认值为DEFAULT(使用数据库的隔离级别),查询方法可以选择SUPPORTS propagation属性: 用于指定事务的传播行为,默认值为REQUIRED(一定会有事务) read-only属性:用于指定事务是否只读,只有查询方法才能设置为true,默认值是false timeout属性:用于指定事务的超时时间,默认值为-1(表示永比超时)(以秒为单位) rollback-for属性: 用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值,表示任何异常都回滚 no-rollback-for属性: 用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,表示任何异常都回滚 3、配置AOP中的切入点表达式 把 事务通知(切面) 配置到相应的切点上 <!--配置切入点表达式--> <aop:config> <!--切入点表达式--> <aop:pointcut id="pt1" expression="execution(* com.zy.serivce.impl.*.*(..))"/> <!--配置切点与事务通知(相当于一个切面)的关系--> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/> </aop:config>
2、注解
一、自己创建的Bean类
1、@Component 在Bean类上,把该类放入容器 @Controller表现层 @Service业务层 @Repository持久层 2、@Autowired给属性自动注入容器中的bean(会根据类型和属性名查找) required属性默认为true不允许为空、为false时允许为空 3、@Autowired + @Qualifier指定id的bean进行注入 4、@Resourec =@Autowired + @Qualifier 5、@Value(${表达式})注入基本类型数据 6、@Scope指定bean的作用范围,写在类上 7、@PreDestroy指定销毁方法,写在方法上 8、@PostConstruct指定初始化方法,写在方法上
二、主配置文件
1、@Configuration声明为配置文件(可以不写,直接加载),类上 2、@ComponentScan创建容器时要扫描的包,类上 3、@ComponentScans扫描包的集合(就是 @ComponentScan的一个集合) 4、@Bean 配置类方法上,把该方法返回的对象,注入容器 5、@Scope方法上,指定bean的作用范围 6、@PropertySource把.property配置文件读入,可使用 @Value(${})取值 7、@Import引入子配置类 8、@Qualifier另一种用法:放在主配置类构造bean的方法的形参上,会自动注入容器中的值 9、@EnableAspectJAutoProxy 指明配置类开启支持AOP注解配置 10、@EnableTransactionManagement 开启事务注解的支持
三、junit整合
在测试类中: @RunWith(SpringJUnit4ClassRunner.class)测试类上 @ContextConfiguration(classes = SpringConfiguration.class)测试类上,指定主配置文件 classes指定配置类 locations指定配置文件 在属性上: @Autowired @Qulifier @Resourec @Test .......
四、AOP相关注解
1、@Aspect 表示当前类是一个切面类(别忘了把切面类放入容器) 2、@Before 前置 @AfterReturning 后置 @AfterThrowing 异常 @After 最终 @Around 环绕 配置在相应方法上 3、@Pointcut 切入点表达式,配置方法上,当调用该方法使用该表达式 4、@EnableAspectJAutoProxy 纯注解配置时候,指明配置类开启支持AOP注解配置
五、声明式事务:
1、需要添加事务的方法和类上使用@Transactional,使用该注解属性设置事务各种属性 2、别忘记把事务管理器放入容器 3、@ EnableTransactionManagement 开启注解的支持,在主配置类上添加
3、JdbcTemplate
1、创建对象: new JdbcTemplate(传入一个DataSource); 2、查询: jdbcTemplate.query( "sql语句 " , 要封装到哪一个类中 , sql语句的注入(args...)); 对于传入的类型: 方法一:实现一个RowMapper接口,实现里面的mapRow方法 方法二:使用spring框架给我们设置好的 BeanPropertyRowMapper类 3、增删改: jdbcTemplate.update("sql语句");