title: 入门Spring_02 date: 2020-06-07 20:25:31 tags:
特殊值的注入问题
value和注入方式的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxComir4-1593681149893)(https://s1.ax1x.com/2020/06/07/tRFRzj.png)]
特殊值注入:
1.使用<![CDATA[ ]]>标记
2.使用XML预定义的实体引用
给对象类型赋值null:
<property name="name" >
<null/> --->注意 这里没有<value>
</property>
给对象类型赋空值:
<property name="name" >
<value></value>
</property>
在ioc中定义bean的前提:该bean的类必须提供 无参构造
各种类型的自动装配
自动装配(只适用于ref类型):
约定优于配置
自动装配:
<bean id="course" class="org.yishan.entity.Course" autowire="byName|byType|constructor|no"> buName本质就是byId
byName: 自动寻找其他bean的id值=该Course类的属性名
byType: 其他bean的类型(class)是否与该Course类的ref属性类型一致 (注意,此种方式必须满足:当前Ioc容器中只能有一个Bean满足条件)
constructor: 其他bean的类型(class)是否与该Course类的构造方法的类型一致;此种方式的本质就是byType
可以在头文件中一次性将该ioc容器的所有bean统一设置成自动装配:
<beans xmlns="http://www.springframework.org/schema/beans"
......
default-autowire="byName">
自动装配虽然可以减少代码量,但是会降低程序的可读性,使用时需要谨慎。
使用注解定义bean:通过注解的形式将bean以及相应的属性值放入ioc容器
<context:component-scan base-package="org.yishan.dao">
</context:component-scan>
Spring在启动的时候,会根据base-package在该包中扫描所有类,查找这些类是否有注解@Component("studentDao"),如果有,则将该类加入Spring Ioc容器
@Component细化
dao层注解:@Registered
service层注解:@Service
控制器层注解:@Controller
使用注解实现事务(声明式事务)
目标:通过事务使以下方法要么全成功,要么全失败
public viod addStudent(){
//增加班级
//增加学生
//增删改查
}
a.引jar包
spring-tx-4.3.9.RELEASE.jar
mysql-connector-java-8.0.11.jar
commons-dbcp.jar 连接池使用到的数据源
commons-pool.jar 连接池
spring-jdbc-4.3.9.RELEASE.jar
aopalliance-1.0.jar
b.配置
jdbc\mybatis\spring
增加事务tx的命名空间
<!-- 增加对事务的支持 -->
<tx:annotation-driven transaction-manager="txManager" />
c.使用
将需要成为事务的方法前增加注解:
@Transactional(readOnly=false,propagation = Propagation.REQUIRED)