目录
用XML方式声明bean
首先我们创建一个空的java工程
我们要导入一个spring的依赖
注意在maven工程里瞅一眼
我们创建一个业务层接口
还有四个实现类
我们最初的spingboot生命bean的方式是通过xml声明
我们在resources文件夹下创建一个配置文件
我们书写代码
首先初始化上下文对象
接着拿到bean
打印输出
我们在xml里声明的时候
还可以不要这个id
这样进行配置
这样我们要传一个类加载器的对象进去
打印的是内存地址编号
类的全限定名,加上对象的哈希码(以十六进制表示)。
注意
然而我们要去拿同一个类的不同对象就会有些复杂
获取时指定名称
精准获取
否则会报未指定bean的异常
我们在初始化上下文对象
获取我们在spring的配置文件里定义的所有的bean的信息
打印
编辑
我们尝试加载第三方bean
我们在配置文件里试试
用我们刚刚提到的方法遍历
拿到了第三方bean
说明bean被成功加载
个人号推广
博客主页
Web后端开发
Web前端开发
数据库开发
项目实战
算法与数据结构
计算机基础
回忆录
用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被成功加载
小结
个人号推广
博客主页
多多!-CSDN博客
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