spring中有两种Bean
第一种 普通 Bean 就是我们在配置文件中 定义的类对象 创建bean 并定义相关的id和声明类对象
普通bean的特点在于 在配置文件中定义的类型 也就是返回类型
就比如 你定义的是一个 book类的类型 那你这个bean返回的 也比如是个book类型的对象
第二种 是在工厂类中统一管理的工厂Bean
特点上 还是有比较大区别的 首先 工厂Bean 又叫FactoryBean 他定义的类型和返回类型是可以不一样的
通常作为一个工厂类 来管理bean对象操作
我们创建一个java项目 引入spring中的基本依赖
然后在src下创建两个包 我这里直接叫 spring5 和 collectiontype 你们可以根据自己的喜好起名 跟我的一样 可以避免一些名字问题 毕竟你们的代码大部分可以直接从我这复制
然后 我们在 collectiontype包下创建一个 Course 类 参考代码如下
package collectiontype;
//课程类
public class Course {
//课程名称
private String cname;
public void setCname(String cname) {
this.cname = cname;
}
public String toString() {
return "cname = "+cname;
}
}
这是一个管理课程的类 定义 字符串的cname 代表课程名称 然后 定义了他的set方法
改写了类的toString方法 这样直接输出对象 就会输出cname的值
在 spring5目录下创建一个java类 我这里取名为MyBean
package spring5;
import collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;
public class MyBean implements FactoryBean<Course> {
@Override
public Course getObject() throws Exception {
Course course = new Course();
course.setCname("测试工具");
return course;
}
@Override
public Class<?> getObjectType() {
return null;
}
}
这里 我们实现了 FactoryBean接口 这样就表示他是一个工厂类
然后 定义泛型 指定Course对象类型 这个就代表 我们返回的是一个 Course类的对象
getObject返回的值 就是最后 bean对象返回的值
然后我们在src下创建 bean.xml 配置文件 参考代码如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mybean" class="spring5.MyBean"></bean>
</beans>
这里 我们就创建了一个bean MyBean对象
然后 在src下创建一个text测试类 参考代码如下
import collectiontype.Course;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class text {
public static void main(String args[]) {
//获取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Course course = context.getBean("mybean", Course.class);
System.out.println(course);
}
}
可以看到 我们创建的是mybean的对象反射对象 但我们接收的类型是Course类的 因为我们MyBean实际返回的是一个Course类的对象
然后通过System.out.println输出了对象的toString方法
运行结果如下