spring的配置及依赖注入(详细)

简介: spring的配置及依赖注入(详细)

1、spring的配置

1.1、起别名

alias设置别名,为bean设置别名,可以设置多个别名

<!--设置别名:在获取Bean的时候可以使用别名获取--> 
<alias name="user" alias="user2"/>

1.2、bean的配置

<!--注册一个javabean到spring容器中,这里name属性也可以设置多个别名,-->
<bean id="user" class="com.lili.entity.User" name="user3 user4 user5">
    <property name="age" value="12"/>
    <property name="name" value="张三" />
</bean>

1.3、import

可以导入其他配置文件

<import resource="beans.xml"/>

2、spring的依赖注入(DI)

  • 依赖:Bean对象的创建依赖于容器
  • 注入:Bean对象所依赖的资源,由容器来设置和装配

2.1、构造器注入

<!--方式一(根据参数下标设置)-->
    <bean id="user1" class="com.lili.entity.User">
        <constructor-arg index="0" value="12"/>
        <constructor-arg index="1" value="张三"/>
    </bean>
<!--方式二(根据参数名字设置)-->
    <bean id="user2" class="com.lili.entity.User">
        <constructor-arg name="age" value="12"/>
        <constructor-arg name="name" value="张三"/>
    </bean>
<!--方式三(根据参数类型设置)-->
    <bean id="user3" class="com.lili.entity.User">
        <constructor-arg type="int" value="12"/>
        <constructor-arg type="java.lang.String" value="张三"/>
    </bean>

2.2、Set注入【重点】

1.编写复杂类型实体类

Address.java

public class Address {
    private String address;
    // get、set、toString
}

Student.java

public class Student {
    private String name;
    private Address address;
    private String[] books;
    private List<String> hobbies;
    private Map<String,String> card;
    private Set<String> games;
    private Properties properties;
    private String wife;
    // get、set、toString
}

2.开始注入

1、常量注入

<bean id="student" class="com.lili.entity.Student">
     <property name="name" value="齐菁菁"/>
</bean>

2、bean注入

<bean id="student" class="com.lili.entity.Student">
    <property name="address" ref="address"/>
</bean>
<bean id="address" class="com.lili.entity.Address">
    <property name="address" value="china"/>
</bean>

3、数组注入

<property name="books">
    <array>
        <value>自律</value>
        <value>美学</value>
        <value>杂念</value>
     </array>
</property>

4、map注入

<property name="card">
    <map>
        <entry key="奥特曼" value="迪迦"/>
        <entry key="弼马温" value="孙悟空"/>
    </map>
</property>

5、set注入

<property name="games">
    <set>
        <value>王者荣耀</value>
        <value>天天酷跑</value>
        <value>天天飞车</value>
     </set>
</property>

6、list注入

<property name="hobbies">
    <list>
        <value>羽毛球</value>
        <value>乒乓球</value>
    </list>
</property>

8、properties注入

<property name="properties">
    <props>
        <prop key="学号">124</prop>
        <prop key="性别">男</prop>
    </props>
</property>

9、Null注入

<property name="wife">
    <null/>
</property>

10、测试:

@Test
public void test3() {
    // 加载配置文件获取上下文对象
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml");
    System.out.println("------------");
    // 从容器里获取对象
    Student student = (Student) context.getBean("student");
    System.out.println(student);
}

11、运行如下:

Student{name='齐菁菁', address=Address{address='china'}, books=[自律, 美学, 杂念], hobbies=[羽毛球, 乒乓球], card={奥特曼=迪迦, 弼马温=孙悟空}, games=[王者荣耀, 天天酷跑, 天天飞车], properties={学号=124, 性别=男}, wife='null'}

2.3、扩展依赖注入实现

实体类:

public class User {
    /**
     * 年龄
     */
    private int age;
    /**
     * 名字
     */
    private String name;
    public User(){
    }
    public User(int age,String name){
        this.age = age;
        this.name = name;
    }
    // get,set,toString
}

p命名空间注入:需要在头文件加入约束文件(set注入方式)

导入约束 : xmlns:p="http://www.springframework.org/schema/p"
    <!--P(属性命名空间),set方法依然要有-->
<bean id="user1" class="com.lili.entity.User" p:age="12" p:name="qijingjing"/>

c:命名空间注入:需要在头文件加入约束文件(构造器注入方式)

导入约束 : xmlns:c="http://www.springframework.org/schema/c"
<!--C(构造器命名空间)-->
<bean id="user2" class="com.lili.entity.User" c:age="13" c:name="qijingjing" />

测试代码:

@Test
public void test4() {
    // 加载配置文件获取上下文对象
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans4.xml");
    System.out.println("------------");
    // 从容器里获取对象
    User user1 = (User) context.getBean("user1");
    User user2 = (User) context.getBean("user2");
    System.out.println(user1);
    System.out.println(user2);
}

结果如下:

User{age=12, name='qijingjing'}
User{age=13, name='qijingjing'}


目录
相关文章
|
3月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
539 0
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
26天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
140 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
14天前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
|
27天前
|
Java 数据库连接 Maven
Spring基础1——Spring(配置开发版),IOC和DI
spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
Spring基础1——Spring(配置开发版),IOC和DI
|
1月前
|
IDE Java 开发工具
还在为繁琐的配置头疼吗?一文教你如何用 Spring Boot 快速启动,让开发效率飙升,从此告别加班——打造你的首个轻量级应用!
【9月更文挑战第2天】Spring Boot 是一款基于 Spring 框架的简化开发工具包,采用“约定优于配置”的原则,帮助开发者快速创建独立的生产级应用程序。本文将指导您完成首个 Spring Boot 项目的搭建过程,包括环境配置、项目初始化、添加依赖、编写控制器及运行应用。首先需确保 JDK 版本不低于 8,并安装支持 Spring Boot 的现代 IDE,如 IntelliJ IDEA 或 Eclipse。
92 5
|
2月前
|
Java 微服务 Spring
Spring Cloud全解析:配置中心之解决configserver单点问题
但是如果该configserver挂掉了,那就无法获取最新的配置了,微服务就出现了configserver的单点问题,那么如何避免configserver单点呢?
|
2月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
2月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
37 0
|
2月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
51 0