@Configuration public class MySpringConfig { @Bean public User user(){ return new User("张三"); } }执行测试类,结果如下:4、通过@Import注解进行注入同@bean注解一样,@Import注解主要的用法也是注入第三方的类到容器中。依据上面的代码进行修改,MySpringConfig类中去掉@bean相关代码,增加@Import注解如下:package com.cyx.demo.config;
@Configuration @Import({User.class}) public class MySpringConfig { }运行测试类,报如下错误,但是打印spring注入对象中发现了一个com.cyx.demo.entity.User,这是因为@Import注解注入的beanName会加上包名。可以把测试类改成如下,通过全路径去取User对象。public class Test { public static void main(String[] args) { //以xml的方式执行 // ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //以注解的方式执行 ApplicationContext context = new AnnotationConfigApplicationContext(MySpringConfig.class); //打印spring注入的对象 String[] names = context.getBeanDefinitionNames(); Arrays.asList(names).forEach(name->System.out.println("beanName:"+name)); //获取对象 // User user = context.getBean("user", User.class); User user = context.getBean("com.cyx.demo.entity.User", User.class);//获得通过@import注解注入的对象 System.out.println(user.toString()); } }运行结果如下:没有进行参数初始化可以按照第2种方法中说的,通过配置文件注入初始化参数。5、通过ImportSelector接口注入ImportSelector接口是对@Import注解的扩展,通过其进行批量的配置,或者通过代码动态返回注入对象,在此仅简单的编写一个示例类。新建一个MyImportSelector类实现ImportSelector接口,如下:package com.cyx.demo.config;
public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { return new String[]{"com.cyx.demo.entity.User"}; } }selectImports方法返回的就是数组形式的注入类的全路径名称。然后MySpringConfig中Import改成导入上面的接口实现类:package com.cyx.demo.config;
全部评论