Spring初使用:使用Spring创建对象
目录
- 准备
- 手动创建对象
- 使用spring创建对象
- 使用xml配置文件的方式创建对象
- 使用注解的方式创建对象
- spring在哪个阶段创建对象
- 获取容器中对象的数量
- 获取容器中对象的名称
- 创建非自定义类的对象
准备
为了方便获取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可以创建非自定义类的对象
更多相关文章
- 【庖丁解牛】如何解决wordpress安装主题或者插件时候提示:“安装
- Servlet监听器使用实例(提高程序运行速度)
- Windows部署多个Memcached和Redis服务
- 使用 Pillow 快速创建 GIF 动图
- Java面试题,Java面试题及答案,2021最新的,都整理好了
- PO BO VO DTO POJO DAO概念及其作用(附转换图)
- Oracle的簇与簇表
- 使用Composition API在Vue3中创建防抖搜索输入框
- Vue开发中可以使用的ES6新特征