基于纯xml配置的方式
这种方式是构建Sping的过程中全部使用xml配置文件的方式,如Bean的配置和依赖注入都是在xml文件中完成,不使用任何注解。
这种方式参考博文:
Spring入门一键快速上手:https://blog.csdn.net/qq_41256238/article/details/107001180
SpringIOC控制反转之XML配置:https://blog.csdn.net/qq_41256238/article/details/107026891
Spring DI(依赖注入)之xml配置:https://blog.csdn.net/qq_41256238/article/details/107030722
基于xml与注解结合使用的配置方式
这种方式是使用注解完成控制反转和依赖注入,但是还是需要使用xml文件,在xml文件中配置组件扫描器,指定扫描的包,这样Spring在启动的时候才回去解析包下的注解,完成依赖注入和类的控制反转,也是使用人数最多的一种方式。
Spring控制反转(IOC)之注解配置:https://blog.csdn.net/qq_41256238/article/details/107026907
Spring DI(依赖注入)之注解配置:https://blog.csdn.net/qq_41256238/article/details/107121336
基于纯注解的配置方式
这种方式是使用纯注解的方式,完成Spring的初始化,这个配置过程中不使用xml配置,甚至完完全全去掉了xml配置文件。
@Bean
此注解作用于方法上,表示将此方法返回的实例初始化到Spring容器中进行管理,可以指定存入Bean的id;相当于xml配置中的<bean>标签。
如果不指定存入Bean的id,那么默认Bean的id为使用此注解的方法名;也可以按照返回实例的数据类型进行获取。
@Configuration
此注解的作用就是配置,也就相当于Spring中的applicationContext.xml配置文件,我们以前要想创建Spring容器是不是要加载这个配置文件呢?
所以我们基于纯注解的方式也要加载@Configuration注解所在的类,才能初始化Spring容器。
而且@Bean标签一般出现在使用@Configuration注解的配置类中,对应了applicationContext.xml中编写<bean>标签。
@ComponentScan
此注解就是相当于组件扫描器,与我们在applicationContext.xml文件中配置的<context:component-scan>标签,用于扫描使用注解的类所在的包;只有被组件扫描器扫描的包下的注解才能被Spring解析。User.java 用户实体类
/** * 用户实体类 */ public class User { private String name; //姓名 private int age; //年龄 //省略get、set方法 }SpringConfig.java Spring配置类,相当于applicationContext.xml配置文件
/** * Spring配置类,相当于applicationContext.xml配置文件 */ /* @Configuration:表示此类是一个Spring配置类,可以使用此配置类实例化Spring容器 */ @Configuration public class SpringConfig { /* @Bean:表示将此方法的返回实例,放入Spring容器进行统一管理 */ @Bean public User getUserDao() { //创建一 return new User(); } }测试类
/** * 测试类 */ public class SpringConfigTest { public static void main(String[] args) { //加载SpringConfig配置类,创建Spring容器 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); //获取Bean User user = (User) context.getBean("getUserDao"); User bean = context.getBean(User.class); //打印对象 System.out.println(user); System.out.println(bean); } }AnnotationConfigApplicationContext类:用于加载java配置类的方式,初始化Spring容器。
ClassPathXmlApplicationContext类:用于加载xml配置文件的方式,初始化Spring容器。
结果
总结
配置类中的方法是返回 bean 对象的实例,放入容器。那么一个方法返回一个 bean ,如果我们的项目中存在非常多的类,难道需要创建很多个方法吗?
当然不需要,此时就需要使用@ComponentScan注解
User.java 用户实体类
/** * 用户实体类 * @Repository:表示Spring启动后会使用此注解的类创建实例,并存入Spring容器,如果不指定存入Bean的id,那么默认id为类名首字母小写。 */ @Repository public class User { private String name; //姓名 private int age; //年龄 //省略get、set方法 }SpringConfig.java Spring配置类
/** * Spring配置类,相当于applicationContext.xml配置文件 */ /* @Configuration:表示此类是一个Spring配置类,可以使用此配置类实例化Spring容器 @ComponentScan:使用此注解表示配置Spring组件扫描器,用于扫描使用了注解的包。 */ @Configuration @ComponentScan("com.my") public class SpringConfig { }测试类
/** * 测试类 */ public class SpringConfigTest { public static void main(String[] args) { //加载SpringConfig配置类,创建Spring容器 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); //获取Bean User user = (User) context.getBean("user"); User bean = context.getBean(User.class); //打印对象 System.out.println(user); System.out.println(bean); } }结果
以上就是Spring初始化的三种方式,可以根据需求选取使用。