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"/>
相关文章
|
4月前
|
XML Java 开发者
Spring Boot中的AOP实现
Spring AOP(面向切面编程)允许开发者在不修改原有业务逻辑的情况下增强功能,基于代理模式拦截和增强方法调用。Spring Boot通过集成Spring AOP和AspectJ简化了AOP的使用,只需添加依赖并定义切面类。关键概念包括切面、通知和切点。切面类使用`@Aspect`和`@Component`注解标注,通知定义切面行为,切点定义应用位置。Spring Boot自动检测并创建代理对象,支持JDK动态代理和CGLIB代理。通过源码分析可深入了解其实现细节,优化应用功能。
200 6
|
2月前
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
91 0
|
2月前
|
Java API 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
73 0
|
2月前
|
Java 开发者 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——什么是AOP
本文介绍了Spring Boot中的切面AOP处理。AOP(Aspect Oriented Programming)即面向切面编程,其核心思想是分离关注点。通过AOP,程序可以将与业务逻辑无关的代码(如日志记录、事务管理等)从主要逻辑中抽离,交由专门的“仆人”处理,从而让开发者专注于核心任务。这种机制实现了模块间的灵活组合,使程序结构更加可配置、可扩展。文中以生活化比喻生动阐释了AOP的工作原理及其优势。
49 0
|
3月前
|
XML Java 测试技术
Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)
Spring 第五节 AOP——切入点表达式 万字详解!
178 25
|
3月前
|
XML 安全 Java
Spring AOP—深入动态代理 万字详解(通俗易懂)
Spring 第四节 AOP——动态代理 万字详解!
109 24
|
7月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
6月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
215 0
|
10月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
386 6
|
10月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
608 4

热门文章

最新文章

下一篇
oss创建bucket