如标题所记,前面的文章都是在xml的存在下进行的注解等配置,那能不能不用xml呢?答案当然是可以的,请看如下代码。
首先是我先来一个pojo,目的是一会使用其中类的属性作为输出
@Component
public class User {
public String name="jj";
}
可以看到的是我依然在其上注明了@Component的注解交给spring来管理,但其实并没有什么用,正如上文所说的那样,你没有在xml中把位置给spring,它又不是神仙,自己能跑过来把这个类接管了。
那么此刻的问题是出在哪里呢?即我们需要一个东西给spring,让它知道我们要把哪些类托付给它,既然不能动用xml,那我们就用.java的方式来处理这件事情。
@Configuration
public class Config {
@Bean
public User user(){
return new User();
}
}
以上的代码就帮我们完成了这个工作,其实你可以把它变相的看成xml的存在,首先这个@Configuration的Java注解代表的是它是一个配置类,就是告诉spring这个东西你要看一眼(可以如xml那样被扫描过去),随后在xml中我们使用bean标签,这里我们就用一个@Bean的方式加上方法代表这是一个bean,那么这个bean的id是啥呢?就是这个方法的方法名,这里就是user,你可以很清晰的看到方法中返回一个new的对象。
(顺带补充,这里既然是类似xml的存在,我们自然可以用@ComponentScan这种注解,啥意思?忘了在xml中啥意思了?)
最后需要注意的是像xml在读取这个文件的时候,我们一直用的是ClassPathXmlApplicationContext类,但这里不一样
public class T {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
User user = context.getBean("user", User.class);
String name = user.name;
System.out.println(name);
}
}
这是注解配置读取的类,需要注意一下