1.Spring的个人理解
1.xml版本
- 通过xml文件管理bean的注册,将bean注入ioc容器。
- spring管理bean的原理就是,通过工厂类+反射机制+xml解析技术,完成类的实例化,也就是所说的创建类的对象。
- xml文件的配置,实际上就是告诉反射机制目标类的构造,也就是类的结构,用来创建完整的目标类对象,这也就是为啥会有构造注入constructor、属性注入property。
- bean之间的相互引用,使用<bean/>元素的ref属性来指定
- 开启ioc容器的时候就会自动创建好配值得所有bean,用的时候使用ApplicationContext实例化对象直接调用getBean(“bean id”,“bean.class”)就可以简单地获取目标bean的实例化对象了。
- 默认情况下,bean都是单例创建(scope属性singleton模式)的,也就是获得的bean地址都相同。
- scope 的prototype属性,与singleton相反,每次被调用都会创建一个新的引用,每次都相当于是new。
2.注解版本
- 简单的说,注解版本就是比xml将bean注入Ioc容器更快的方式。
- 通过注解,将需要的类先标记为bean,默认都是类的首字母小写,相当于xml中<bean>元素的id属性,然后通过扫描注入到容器中,这些注解都是写到类声明的上面。
- @compoment:通用注解;@Service:业务层注解,就是component换了个名字;@Repository:数据访问层注解;@Controller:控制层注解
- @Autowired:自动装配注解。通常用在成员变量上面。意思就是,根据你声明的实例的类型去匹配你注入到容器的bean,如果匹配到就把实例拿过来用。默认是byType,可以配合@Qualifier注解的参数,来按照你创建的实例名称来匹配bean。
- @Resource:该注解和@Autowired注解一样,只是@Resource是默认按照实例名称匹配注入的bean,如果匹配不到,就用byType来匹配。
- @ComponentScan(“com.wg”):扫描com.wg包下面的所有用bean,注册到容器中,也就是创建bean的实例放入ioc中。