0.简介spring和IoC(控制反转)
Java Spring 是一种广泛用于构建应用程序的 Java 框架。它提供了一个全面的编程和配置模型来简化 Java 开发并促进良好的编程实践。该框架包括控制反转 (IOC)、面向方面编程 (AOP) 以及对一系列数据库和技术的支持等功能。Spring 帮助开发人员构建高度模块化和可测试的应用程序,这些应用程序可以轻松维护和扩展。此外,它还提供了广泛的工具和插件来简化常见任务并改进开发过程。
Spring IoC(控制反转)是 Spring 框架的核心部分,它提供了一种管理构成应用程序的对象的方法。它提供了一种创建和管理对象的机制,它负责实例化、配置和组装这些对象。Spring IoC 的目标是解耦对象之间的依赖关系,以便它们可以轻松换出或更新,而不会影响应用程序的其余部分。这是通过定义一组用于创建和连接对象的规则来实现的,这些规则存储在配置文件中或直接在对象上注释。
1.开始
第一种 普通 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方法
运行结果如下