父类子类属性传递问题,外带懒加载问题

父类子类属性->权限问题

作用域 当前类 同一package 子孙类 其他package
public
protected ×
friendly/default × ×
private × × ×

遇到的坑

        子类和父类相同的属性对象时,并且用getter和setter方法进行spring管理。子类单独调用子类方法,对象可以使用,父类单独调用父类方法,属性对象可以使用,唯独子类调用父类的方法是,父类的属性对象无法使用,空指针。
        子类衍生的父类和单独的父类不是一个对象,那么是不是可以理解成,子类的属性父类是拿不到的,在向上转型时
        其原因未探究出来。
        解决方法:

  1. 删除子类的属性对象,删除子类属性对象的getter和setter,对父类的属性对象的访问权限外放,子类调用父类方法,对属性对象可以拿到。
  2. 父类对象纯抽象化,不做业务处理,并在配置的时候,bean标签加上abstract=”true”,不进行实例化。
  3. 子类不调用父类方法。

懒加载

        懒加载,顾名思义,只有用的时候才会加载。
        在spring中,配置懒加载优先级:

1
2
3
4
5
6
7
8
9
<beans />                <bean />            immediately  
<beans /> <bean lazy-init="true" /> lazy
<beans /> <bean lazy-init="false"/> immediately
<beans default-lazy-init="true"/> <bean /> lazy
<beans default-lazy-init="true"/> <bean lazy-init="true" /> lazy
<beans default-lazy-init="true"/> <bean lazy-init="false" /> immediately
<beans default-lazy-init="false"/> <bean /> immediately
<beans default-lazy-init="false"/> <bean lazy-init="true" /> lazy
<beans default-lazy-init="false"/> <bean lazy-init="false" /> immediately

其他

spring早起是默认懒加载的,在版本迭代和维护之后,默认配置已变成容器创建时加载,所以不配置懒加载的话,项目启动不是很快。当然单例越早注册越好,以便容器在自动装配和其他自省步骤中正确的推理它们。