JavaEE学习(五) Spring入门

本文是学习JavaEE开发的记录笔记

大纲

  • Spring基本概念
    • IOC
    • DI
    • AOP
  • Spring基本模块
  • Maven中增加Spring依赖
  • 入门示例
    • 基于注解的Spring IOC
    • 基于XML配置文件的Spring IOC
  • 引入log4j日志模块

Spring基本概念

  1. IOC(Inversion of Control,控制反转):将设计好的对象交给Spring IOC容器控制,Spring IOC容器控制所有对象的生命周期(创建、销毁等),获取对象的控制管理权,我们只需要向Spring IOC容器获取所需对象即可
  2. DI(Dependency Injection,依赖注入):在系统运行过程中,动态向对象提供它所需的其他资源(对象、数据等),提升系统的灵活、可扩展性
    1.传统应用获取对象


    2.IOC/DI获取对象
  3. AOP(Aspect Oriented Programming,面向切面编程):可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,分离应用的业务逻辑与系统级服务进行内聚性的开发

Spring基本模块

在IDEA中创建Maven项目-增加Spring依赖

  1. 创建项目:打开IDEA选择创建新项目选择Maven项目
  2. 填写Maven项目基本信息:填写GroupId(com.harvie)和ArtifactId(spring01helloworld)和版本号默认(1.0-SNAPSHOT)
  3. 配置Spring:在pom.xml配置文件中增加Spring依赖
    1
    2
    3
    4
    5
    6
    7
    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.13.RELEASE</version>
    </dependency>
    </dependencies>
  4. 刷新依赖,相当于执行mvn compile操作:右键项目-Maven-Reimport

IDEA小技巧

  1. ctrl+O:选择Object可创建无参构造方法
  2. 类中[右键+Generate]:可创建setter/getter方法

基于注解的Spring IOC/DI入门示例

  1. 程序大观:
  2. 创建maven项目导入spring依赖
  3. sec/main/java/下创建hello包存放项目java代码
  4. 创建MessageService类:
    • 添加@Component注解表示这个类交给Spring IOC容器管理
  5. 创建MessagePrinter类:
    • 添加@Component注解表示这个类交给Spring IOC容器管理
    • setService方法添加@Autowired注解表示setService(MessageService service)中的对象需要自动装配注入
  6. 创建ApplicationSpring类:
    • 添加@ComponentScan注解表示这个类中所需的类对象可自动由Spring IOC容器生成
    • 通过语句ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);获取注解装配组件的Spring IOC容器上下文
    • 通过语句context.getBean(MessagePrinter.class);从Spring IOC容器中获取所需要的类对象(Bean对象)

基于XML配置文件的Spring IOC/DI入门示例

  1. 程序大观:如上图,还是以MessageService+MessagePrinter+ApplicationSpring的方式
  2. 创建maven项目导入spring依赖
  3. sec/main/java/下创建hello包存放项目java代码
  4. 创建无注解的MessageService+MessagePrinter类
  5. src/main/resources下创建XML配置文件[New-XML Configuration File-Spring Config]:
    • 添加bean标签,相当于Component注解
    • 添加property标签,相当于Autowired注解
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <!--
      bean元素描述当前对象由spring容器管理
      id属性:对象标识 在程序中根据id获取对象
      class属性:被管理的对象的类全名
      <property>name指定的类中的对象与ref指定的<bean>中的id对象产生依赖关系
      -->
      <bean id="service" class="hello.MessageService"></bean>
      <bean id="printer" class="hello.MessagePrinter">
      <property name="service" ref="service"></property>
      </bean>
  6. 创建ApplicationSpring类:
    • 通过语句ApplicationContext context=new ClassPathXmlApplicationContext(“applicationContext.xml”);指定XML配置文件获取XML配置的Spring IOC容器上下文
    • 通过语句context.getBean(MessagePrinter.class);从Spring IOC容器中获取所需要的类对象(Bean对象)

查看Spring依赖并引入Spring日志系统log4j

  1. 查看Spring依赖:打开pom.xml配置文件[右键-Diagrams-show dependencies]

    可以看到我们引入的spring-context依赖是依赖于aop、beans、expression、core模块,最终依赖于commons-logging日志模块
  2. 引入日志系统log4j实现日志模块:
    1
    2
    3
    4
    5
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
    </dependency>
  3. 编写配置文件将log4j整合入spring中:
    • 进入spring.io官网[product-spring framwork-Learn-对应版本的Reference Doc]或者直接打开4.13的Spring Framwork Reference Doc
    • 查找log4j的配置文件:log4j.properties
    • src/main/resources/下建立配置文件log4j.properties,复制官网的配置文件信息到log4j.properties文件中即可
    • 重新运行程序可看到日志输出: