目录
我们最初的spingboot生命bean的方式是通过xml声明
获取我们在spring的配置文件里定义的所有的bean的信息
用XML方式声明bean
使用 XML 方式声明 Spring Bean 是 Spring 框架的一种传统配置方式。这种方法通过在 XML 文件中定义 bean 及其依赖关系,来组装应用程序的各个组件。以下是详细介绍如何使用 XML 方式声明 bean
首先我们创建一个空的java工程
用maven
现在一点spring的工程没有
我们要导入一个spring的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
注意在maven工程里瞅一眼
我们创建一个业务层接口
package com.bigdata1421.bean.service;
public interface BookService {
void check();
}
还有四个实现类
每个实体类打印输出一行数字
package com.bigdata1421.bean.service.impl;
import com.bigdata1421.bean.service.BookService;
public class BookServiceImpl1 implements BookService {
@Override
public void check() {
}
}
我们最初的spingboot生命bean的方式是通过xml声明
我们在resources文件夹下创建一个配置文件
我们书写代码
<!-- xml方式声明自己开发的bean-->
<bean id="cat" class="com.bigdata1421.bean.Cat"/>
我们接着创建一个应用
书写我们要执行的代码
我们看看我们能不能拿到bean
首先初始化上下文对象
接着拿到bean
打印输出
package com.bigdata1421.bean.app;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App1 {
public static void main(String[] args) {
//初始化上下文对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
//拿到bean
Object cat = ctx.getBean("cat");
//打印
System.out.println(cat);
}
}
我们在xml里声明的时候
还可以不要这个id
这样进行配置
<bean class="com.bigdata1421.bean.Dog"/>
这样我们要传一个类加载器的对象进去
Dog.class
是 Java 语言中的一种特殊语法,表示获取 Dog
类的 Class 对象。Class 对象是 Java 中用于表示类的元数据信息的对象,它包含了类的名称、字段、方法、构造函数等信息。
使用 Dog.class
可以在编码阶段获得对 Dog
类的引用,通常用于反射、泛型、类型检查等场景。例如,在 Spring 框架中,可以使用 Dog.class
来指定需要从应用上下文中获取的 bean 的类型。
package com.bigdata1421.bean.app;
import com.bigdata1421.bean.Dog;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App1 {
public static void main(String[] args) {
//初始化上下文对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
//拿到dog
Dog dog = ctx.getBean(Dog.class);
System.out.println(dog);
}
}
打印的是内存地址编号
类的全限定名,加上对象的哈希码(以十六进制表示)。
在 Java 中,对象的内存地址并不直接暴露给开发者。Java 提供的 hashCode()
方法生成的哈希码并不能被视为对象在内存中的实际地址。Java 虚拟机 (JVM) 通过垃圾收集机制管理内存,内存地址在运行时可能会变化,因此没有直接的方式获取对象的真实内存地址。
然而,对于调试和分析的目的,有时候我们确实需要类似于内存地址的标识符。System.identityHashCode(Object x)
方法可以用来获取对象的“身份哈希码”,这是一个与对象生命周期相关的整数值,尽管它仍然不是实际的内存地址,但在某些情况下可以被用作对象的唯一标识符。
Java 的设计初衷是让开发者专注于业务逻辑而不是内存管理,因此屏蔽了直接操作内存地址的复杂性。而像 C/C++ 这样的语言则允许更底层的内存操作,但也需要开发者对内存管理有更多的掌控和责任。
注意
然而我们要去拿同一个类的不同对象就会有些复杂
我们需要去指定名称
获取时指定名称
精准获取
否则会报未指定bean的异常
小窍门
我们在初始化上下文对象
配置文件的时候
可以调用里面的方法
获取我们在spring的配置文件里定义的所有的bean的信息
打印
我们现在声明的bean都是自己手写的
我们尝试加载第三方bean
我们在配置文件里试试
<!-- xml方式声明第三方开发的bean-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
用我们刚刚提到的方法遍历
package com.bigdata1421.bean.app;
import com.bigdata1421.bean.Dog;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App1 {
public static void main(String[] args) {
//初始化上下文对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
String[] arr = ctx.getBeanDefinitionNames();
for (String s : arr) {
System.out.println(s);
}
}
}
拿到了第三方bean
说明bean被成功加载
小结
个人号推广
博客主页
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482