美文网首页
spring-1-IoC

spring-1-IoC

作者: blank_white | 来源:发表于2020-06-22 19:28 被阅读0次

一、准备工作

环境

IntelliJ Idea
Maven

pom.xml 中添加依赖

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>
  </dependencies>

二、IoC

Inversion of Control:控制反转

  • 一般编程中对象的获取:
接口名  A = new 实现接口的类();
  • Ioc 的思路就是吧 new 的对象抽离
    在一个 xml 文件中做配置:
"server" 是需要  com.Server 类对象
"server2" 是需要  com.Server2 类对象
"server3" 是需要 com.Server3 类对象

在代码中需要使用对象的时候

接口名 A = Spring对象.获取名字叫xx的对象("server");

对象的创建委托给 Spring 框架,从而实现对对象的一些特殊处理的统一控制,更改对象的时候也只需改配置文件,不需要改代码

三、简单配置使用

spring 的 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">
</beans>

配置创建对象,默认是单例模式

<bean id="server" class="com.spyouth.service.SomeServerImpl" ></bean>
单例模式,只创建一个
<bean id="server" class="com.spyouth.service.SomeServerImpl" scope="singleton"></bean>
原型模式,用一次创建一个
<bean id="server" class="com.spyouth.service.SomeServerImpl" scope="prototype"></bean>

使用方法

        String config="applicationContext.xml";
        //通过 类的存放路径
        ApplicationContext cxt=new ClassPathXmlApplicationContext(config);
        //通过 文件系统的路径
        //ApplicationContext cx2=new FileSystemXmlApplicationContext(config);
        SomeServer server= (SomeServer) cxt.getBean("server");
        server.doSome(1,"asd");

四、为 bean 成员赋值

Java 对象若不为成员变量赋值,数值型成员为 0,引用型成员为 null

public class School {
    String name;
    String address;
    set、get方法......
}
public class Student {
    String name;
    School school;
    set、get方法......
}
  • property 赋值
    要为类生成set、get方法,spring 通过调用 set 方法赋值
    <bean id="school" class="com.spyouth.study.School">
        <property name="name" value="清华"></property>
        <property name="address" value="五道口"></property>
    </bean>

    <bean id="student" class="com.spyouth.study.Student">
        <!--基本类型用 name/成员名、value/参数值 -->
        <property name="name" value="张三"></property>
        <!--引用类型用 name/成员名、ref/引用对象名,就是上面那个School对象 -->
        <property name="school" ref="school"></property>
    </bean>
  • 构造方法赋值
    需要对应的构造方法,spring 通过调用构造方法赋值
    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }
    <bean id="student4" class="com.spyouth.study.Student">
        <constructor-arg name="name" value="赵丽"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="school" ref="school"></constructor-arg>
    </bean>

    <bean id="student5" class="com.spyouth.study.Student">
        <constructor-arg index="0" value="赵丽"></constructor-arg>
        <constructor-arg index="1" value="18"></constructor-arg>
        <constructor-arg index="2" ref="school"></constructor-arg>
    </bean>
  • 自动赋值
<!--自动为成员变量赋值 byType 找能赋值给成员变量的对象-->
    <bean id="student2" class="com.spyouth.study.Student" autowire="byType"></bean>
    <!--自动为成员变量赋值 byName 找与成员变量名相同的对象-->
    <bean id="student3" class="com.spyouth.study.Student" autowire="byName"></bean>

  • 注解赋值
    使用注解需要告诉 spring 哪里有注解需要解析
本包及子包都会去找
<context:component-scan base-package="com.spyouth.study"></context:component-scan>
@Component(value = "student8")
public class Student {
    @Value("王五")
    public String name;
    @Value("28")
    public int age;

    //byName
    @Autowired
    @Qualifier(value = "school")
    public School school;
    //byType
    @Autowired
    public School school;
    //先 byName 没有找到就 byType
    @Resource
    public School school;

    //也可以注解在 set 方法上  
    @Value("18")
    public void setAge(int age) {
        this.age = age;
    }
}
  • 注解 value 的省略简写
@Component(value = "student8")
@Component("student8")
对于参数只有 value  二者等效

五、import spring.xml

所有 bean 都写在同一个 xml 文件中,过于混乱,而且不利于协作开发
可以写一个总的 xml ,再将其他 xml 导入其中

    <import resource="classpath:spring-school.xml"></import>
    <import resource="classpath:spring-server.xml"></import>

相关文章

  • spring-1-IoC

    一、准备工作 环境 IntelliJ IdeaMaven pom.xml 中添加依赖 二、IoC Inversio...

网友评论

      本文标题:spring-1-IoC

      本文链接:https://www.haomeiwen.com/subject/wkabihtx.html