Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成(二)

简介: Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成

2) Student

public class Student extends Person {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Demo [name=" + name + "]";
  }
}

3) 配置文件

<bean id="student" class="org.lisen.springdemo.model.Student" parent="person">
    <property name="name">
      <value>张三</value>
    </property>
  </bean>
  <bean id="person" class="org.lisen.springdemo.model.Person" abstract="true">
    <property name="phone">
      <value>139751878778</value>
    </property>
  </bean>

4) 通过Spring的ApplicationContext获取Bean

public class SpringDemo {
  public static void main(String[] args) {
    ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");
    Student student = (Student)cxt.getBean("student");
    System.out.println(student.getName());
    System.out.println(student.getPhone());
  }
}

4.4.3 使用有参数构造方法创建javaBean

constructor-arg

1) Worker

public class Worker extends Person {
  private String workName;
  public Worker(String workName) {
    this.workName = workName;
  }
  public String getWorkName() {
    return workName;
  }
  public void setWorkName(String workName) {
    this.workName = workName;
  }
}

2)配置文件

<bean id="worker" class="org.lisen.springdemo.model.Worker" parent="person">
    <constructor-arg name="workName">
      <value>王小</value>
    </constructor-arg>
    <!-- 第二种方式
    <constructor-arg index="0">
      <value>王小</value>
    </constructor-arg>
     -->
  </bean>

3) 通过Spring的ApplicationContext获取Bean

public class SpringDemo {
  public static void main(String[] args) {
    ApplicationContext cxt = new ClassPathXmlApplicationContext("spring.xml");
    Student student = (Student)cxt.getBean("student");
    System.out.println(student.getName());
    System.out.println(student.getPhone());
    //构造函数注入
    Worker worker = (Worker)cxt.getBean("worker");
    System.out.println(worker.getWorkName());
  }
}

4.4.4 init-method:指定bean的初始化方法

  1. 修改上面的Student类,加入一个init方法,注意该方法不能有参数
public class Student extends Person {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Demo [name=" + name + "]";
  }
  //init方法,不能有参数
  public void init() {
    System.out.println("Student init ....");
  }
}

2) 修改Student类对应的配置文件

<bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init">
    <property name="name">
      <value>张三</value>
    </property>
  </bean>

3) 运行原来的测试用例,会发生后台打印“Student init ....“,表示init-method正常调用。

4.4.5 复杂属性的配置

1) JavaBean属性注入

<bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init">
    <property name="name">
      <value>张三</value>
    </property>
    <property name="addr" ref="addr"/>
  </bean>
  <bean id="addr" class="org.lisen.springdemo.model.Addr">
    <property name="city">
      <value>长沙</value>
    </property>
  </bean>

java部分代码比较简单,请根据配置文件自行完成。

2)List或数组

声明属性

private int[] arr;
 private List list;

配置文件

  <property name="list">
      <list>
        <value>123</value>
        <value>456</value>
        <value>789</value>
        <value>asd</value>
      </list>
    </property>

3)Map

private Map map;

配置文件

 <property name="map">
      <map>
        <entry key="aa" value="123"/>
        <entry key="bb" value="456"/>
        <entry key="cc" value="789"/>
      </map>
    </property>

4.Properties

private Properties prop;

配置文件

  <property name="prop">
      <props>
        <prop key="dd">qwer</prop>
        <prop key="ee">tyu</prop>
        <prop key="ff">iop</prop>
      </props>
    </property>

5. 多配置文件

系统一般会被分成多个模块,可以为每个模块配置一个配置文件,便于管理,在版本控制软件中也可以减少冲突

spring-a.xml 假设为a模块的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  <bean id="student" class="org.lisen.springdemo.model.Student" parent="person" init-method="init">
    <property name="name">
      <value>张三</value>
    </property>
    <property name="addr" ref="addr"/>
  </bean>
  <bean id="addr" class="org.lisen.springdemo.model.Addr">
    <property name="city">
      <value>长沙</value>
    </property>
  </bean>
  <bean id="person" class="org.lisen.springdemo.model.Person" abstract="true">
    <property name="phone">
      <value>139751878778</value>
    </property>
  </bean>
  <bean id="worker" class="org.lisen.springdemo.model.Worker" parent="person">
    <constructor-arg name="workName">
      <value>王小</value>
    </constructor-arg>
    <!-- 第二种方式
    <constructor-arg index="0">
      <value>王小</value>
    </constructor-arg>
     -->
  </bean>
</beans>

spring.xml 为总的spring配置文件, 在总配置文件中导入其他模块即可。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  <import resource="spring-a.xml"/>
</beans>

6. 与web集成

6.1 集成配置

在web.xml中加入如下配置:

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>
     <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

6.2 获取配置的Bean

/**
 * 用于简化Bean的获取.
 * 
 * ApplicationContextAware接口:
 * 实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来
 * 
 * @author Administrator
 */
public final class SpringBeanUtil implements ApplicationContextAware {
  private SpringBeanUtil() {
  }
  private static ApplicationContext cxt;
  @Override
  public void setApplicationContext(ApplicationContext appContext) throws BeansException {
    cxt = appContext;
  }
  /**
   * 根据Bean的id来获取Bean对象
   * @param id 配置文件中的bean的id属性
   * @return Object
   */
  @SuppressWarnings("unchecked")
  public static <T> T getBean(String id) {
    return (T)cxt.getBean(id);
  }
} 

配置文件

     <bean 
class="org.lisen.springdemo.util.SpringBeanUtil"/>
相关文章
|
9天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
58 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
69 5
|
2月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
76 8
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
2月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
49 5
|
2月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
49 4
|
4月前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
128 0
|
8月前
|
Java 容器 Spring
Spring的加载配置文件、容器和获取bean的方式
Spring的加载配置文件、容器和获取bean的方式
60 3
Spring的加载配置文件、容器和获取bean的方式
|
XML Java 数据格式
Spring源码深度解析01-debug式看如何加载xml配置文件
Spring源码深度解析01-debug式看如何加载xml配置文件
157 0