准备
为了方便获取spring所依赖的jar包,这里直接使用maven来创建项目(maven创建项目可以参考这篇文章:项目管理工具 Maven 的下载,安装,配置以及项目的创建和管理)
项目结构
在pom.xml配置文件中添加spring的依赖
创建类Student
手动创建对象
在测试类中手动创建Student对象并执行out方法
使用spring创建对象
使用xml配置文件的方式创建对象
创建spring配置文件
在资源目录resources下创建spring配置文件,名称自定义
Ctrl + Alt + insert 搜索 xml 找到 Spring Config
在配置文件中使用bean标签创建对象,一个bean标签对应一个对象,id为对象名,class为类的全路径
格式:<bean id="对象名" class="类的全路径" ></bean>
加载spring配置文件
// spring 配置文件名称
String filename = "beans.xml";
// ApplicationContext 就是spring的容器
// ClassPathXmlApplicationContext 从类路径中加载spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext(filename);
从类路径中加载配置文件,就是从存放java文件编译后的class文件的目录中加载配置文件,maven项目编译后会自动将资源目录下的spring配置文件复制到类路径下,如果你的类路径下没有spring的配置文件,可以手动将其复制到该目录下
获取spring创建的对象
// 获取对象
// 通过对象id的方式获取,getBean()方法返回值为object,需要强转
Student student = (Student) ac.getBean("student");
spring创建好对象后,会将对象存放到map中,也就相当于将对象存放到spring的容器中 格式为:map.put( 对象id , 对象),所以我们可以通过对象的id来从容器中获取对象
使用测试类测试
使用注解的方式创建对象
使用Component注解创建对象
在需要创建对象的类中添加Component注解,注解写在类的上面
格式:@Component(value = 对象名) 或 @Component(对象名) 或 @Component;不指定对象名时,默认对象名为类名的首字母小写
在配置文件中添加组件扫描器
格式:<context:component-scan base-package=“包名”></context:component-scan>
作用:扫描指定包及子包下的所有类,根据类中的注解创建对象
测试类测试
使用其他注解创建对象
以下注解也可以创建对象,但不同注解创建的对象会有不同的功能
@Repository :创建dao对象,用来访问数据库
@Service :创建Service对象,用来处理事务逻辑
@Controller:创建控制器对象,用来接收请求
spring在哪个阶段创建对象
spring在加载完配置文件后(执行完下列代码),就会将配置文件中的所有对象都创建出来
String filename = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(filename);
我们可以验证一下
在Student类中添加无参构造方法:
在配置文件中添加要创建的对象
运行测试方法
运行结果
由此可证明,在spring加载完配置文件后,会将配置文件中的所有对象都创建出来
获取容器中对象的数量
通过getBeanDefinitionCount()
方法获取容器中对象的数量,返回值为int类型
配置文件
获取对象的数量
获取容器中对象的名称
通过getBeanDefinitionNames()
方法获取容器中对象的名称,返回值是泛型为字符串的一个数组
配置文件
获取对象名称
创建非自定义类的对象
上面的例子中我们创建的是自定义类的对象,也就是这个类是我们自己创建的,那我们能否创建非自定义类的对象呢?也就是创建已经存在的类的对象
这里以创建String类的对象为例
spring配置文件
测试类
由测试方法可知,我们使用spring创建的String类的对象可以调用String对象的方法,所以,spring可以创建非自定义类的对象