循环依赖问题
- 如果使用构造函数注入,可能会产生循环依赖问题,因为调用类构造函数创建对象的时候,比如A依赖B,B依赖A,spring加载bean的时候会不知道先加载哪个bean,因为都需要调用构造函数创建bean。
- 而使用字段注入或者setter注入的时候,这两者其实是在调用构造函数创建对象之后spring才开始装配依赖的,这是一种可以解决循环依赖的方案
- 第二种方案是使用@Lazy注解进行懒加载,这种情况加载bean的时候不会完全加载,而是创建一个代理注入到另一个bean中,被注入的bean只有在被第一次使用的时候才会被真正加载
- @Resource属于java ee规范,而@Autowired属于spring规范,前者无法使用在构造函数中
- 如果构造器注入,那么依赖注入发生在类实例化之后
Mylsam和InnoDB的区别
- mylsam不支持事务等高级处理,而后者支持。
事务处理:所谓事务处理,就是原子性操作。比如你购买一个商品时,可能会对数据库有着一系列操作,但是可能会发生某个操作失败的情况,如果有一个操作失败了,那么这一系列相关数据必须保持原封不动,即恢复原来的状态,事务正是为了防卫这种情况而产生的
- mylsam在执行数据库操作(insert,update,delete)的时候,前者会锁表,而后者会锁行。因此,当你需要写入大量数据的时候,可以选择后者作为引擎,锁行的效率比较高。而当你数据库操作以select为主的话,那么选择前者的效率比较高
*后者支持外键,而前者不支持
外键:是用于加强两个表数据之间链接的一列或多列。
- 作用:保证数据的完整性。假如档案表中有学号,姓名等学生信息。而成绩单中有姓名,学号,成绩等,设成绩单表中的学号为外键,即在录入成绩的时候,必须要保证档案表中有这个学号,否则就无法录入,避免了无效数据存入数据库中。
- 好处:如果不使用外键,要保证数据的完整性则必须通过程序判断,这样不但增加了大量的查询操作,而且爱并发的时候容易产生很多问题