Spring开启控制反转

时间:2024-04-03 16:16:18
  1. 引入依赖
    1. spring-context.jar
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.33</version>
</dependency>
  1. 导入配置文件
  2. spring.xml(任意文件名)

开启IOC服务(控制反转)

基于XML文件

  1. 通过bean标签将类纳入Srping容器管理
<bean id="student" class="权限定类名"/>
  1. Spring容器对象会将建好的Student对象以键值对的形式存储在容器内
  2. bean标签默认情况下要求Spring容器对象调用当前类的无参构造方法完成其实例对象的创建
  3. Spring容器对象在创建完毕后,自动完成了Student类对象创建,并不在getBean()的时候完成实例对象创建
  4. 一个Bean标签只能要求Spring容器对象创建指定类的一个实例对象,如果需要Spring容器对象创建多个指定类的对象,则需要声明多个bean标签

演示

<bean id="student" class="com.wry.bean.Student"/>
public void test01(){
    //获取Spring容器对象,此时Spring容器将实例化所有被Spring管理的类,并以k-v形式储存
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    Student student = (Student) applicationContext.getBean("student");
    student.sayHello("张三");//Hello,My name is张三
}

基于注解

  1. @component(value = "id")
    1. 表示这个类实例对象需要由Spring容器对象负责创建
    2. value属性指定当前对象在Spring容器内部的名称,value=可省略
    3. value属性可省略,默认id为当前对象名首字母小写
    4. 由@component修饰的类,必须有空参构造方法
  1. spring.xml配置文件中配置搜索范围
<!--组件扫描-->
context:componet-scan base-package="包名"/>

演示

<context:component-scan base-package="com.wry.bean"/>
@Component("student")//可省略("student")
public class Student {
    private Integer sid;
    private String sname;
    。。。
}
public void test01(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    Student student = (Student) applicationContext.getBean("student");
    student.sayHello("李四");//Hello,My name is李四
}

只能使用XML配置的情况

如果只有类文件的class,没有他的源文件,只能用XML方式将类注册到Spring容器中

<bean id="arrayList" class="java.util.ArrayList"/>
public void test01(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    List list = (ArrayList) applicationContext.getBean("arrayList");
    System.out.println(list);//[]
}