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'}


目录
相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
48 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
57 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
41 0
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
9天前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
25 2
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
34 1
|
3月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
244 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
154 1
|
3月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
261 1
|
2月前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
48 0