zoukankan      html  css  js  c++  java
  • Java进阶知识16 Spring的基础配置详解

    1、SSH各个的职责  

    Struts2:是web框架(管理jsp、action、actionform等)。
    Hibernate:是ORM框架,处于持久层。
    Spring是一个容器框架,用于配置bean,并维护bean直接的关系。
                 Bean(组件):java中任何一种对象,如 javabean(domin、entity、POJO、POVO)、数据源、dao、service、action等
                           比如:User、数据表user、UserDao、UserService、UserAction

    2、Spring的原理  

      2.1、工作原理

          1、通过Spring容器IOC(inverse of control)动态注入,把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护。即程序之间不用再new对象了,且方法之间也不用相互调用了,都是同过spring的容器(applicationContext.xml)来维护他们之间的关系(创建对象/调用方法等等)。

          2、通过Spring容器AOP(Aspect-Oriented Programming),可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块/方法)从而达到对一个模块扩充的功能。

      2.2、工作流程

          简单的理解:Struts2调用对应的xxxAction中的方法时,Spring容器根据相关的配置去调用对应的Service -->DAO -->entity -->数据库,最后把结果原路返回给调用者(Struts2)。

      2.3、相关概念

         IoC是什么?
             答:IOC(inverse of control) 控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护。

         DI是什么?
             答:DI(dependency injection)依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术。——> IOC 等于 DI

         AOP是什么?
             答:AOP(Aspect-Oriented Programming)面向切面编程,就是在调用某个类对象的具体方法前/后,先去调用你指定的模块/方法,最后,程序再按原来的顺序执行下去。

      2.4、Spring的几大模块

      1) Spring Core  spring的核心功能: IOC容器, 解决对象创建及依赖关系
      2) Spring Web  Spring对web模块的支持。
                    --> 可以与struts整合,让struts的action创建交给spring
                    --> 或者说spring mvc模式
      3) Spring DAO  Spring 对jdbc操作的支持  【JdbcTemplate模板工具类】
      4) Spring ORM  spring对orm的支持:
                    --> 既可以与hibernate整合,【session】
                    --> 也可以使用spring的对hibernate操作的封装
      5)Spring AOP  切面编程
      6)SpringEE   spring 对javaEE其他模块的支持

    3、基础配置(实例解析)  

    Dao 层

     1 package com.shore.dao;
     2 
     3 /**
     4  * @author DSHORE/2019-10-15
     5  *
     6  */
     7 public class UserDao {
     8     private String name;
     9 
    10     public void save() {
    11         System.out.println(name + "用户保存成功");
    12     }
    13     
    14     public String getName() {
    15         return name;
    16     }
    17     public void setName(String name) {
    18         this.name = name;
    19     }
    20 }

    Service 层

     1 package com.shore.service;
     2 
     3 import com.shore.dao.UserDao;
     4 
     5 /**
     6  * @author DSHORE/2019-10-15
     7  *
     8  */
     9 public class UserService {
    10     
    11     private UserDao userDao;
    12     
    13     public void save(){
    14         userDao.save();
    15     }
    16 
    17     public UserDao getUserDao() {
    18         return userDao;
    19     }
    20     public void setUserDao(UserDao userDao) {
    21         this.userDao = userDao;
    22     }
    23 }

    Action 层

     1 package com.shore.action;
     2 
     3 import com.shore.service.UserService;
     4 
     5 /**
     6  * @author DSHORE/2019-10-15
     7  *
     8  */
     9 public class UserAction {
    10     
    11     private UserService userService;
    12     
    13     public String save() {
    14         userService.save();
    15         return "success";
    16     }
    17 
    18     public UserService getUserService() {
    19         return userService;
    20     }
    21     public void setUserService(UserService userService) {
    22         this.userService = userService;
    23     }
    24 }

    applicationContext.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xmlns:tx="http://www.springframework.org/schema/tx"
     6        xsi:schemaLocation="
     7        http://www.springframework.org/schema/beans
     8        http://www.springframework.org/schema/beans/spring-beans.xsd
     9        http://www.springframework.org/schema/tx
    10        http://www.springframework.org/schema/tx/spring-tx.xsd
    11        http://www.springframework.org/schema/aop
    12        http://www.springframework.org/schema/aop/spring-aop.xsd">
    13   
    14            <!-- 
    15               id——指定bean对象的id
    16               class——指定bean的类,不能用接口
    17               scope——单例/多例,默认是单例“singleton”(此时在初始化容器之前就创建对象),多例:用到的时候才创建
    18               lazy-init——懒加载,只针对单例有效,默认是false,如果是true——用到的时候才创建
    19               init-method——指定对象的初始化方法,时间由创建对象的时间来决定
    20             -->
    21             <!-- UserDao userDao = new UserDao() -->
    22         <bean id="userDao" class="com.shore.dao.UserDao" scope="singleton"><!-- 默认是单例,可不写 -->
    23             <property name="name" value="DSHORE"></property>
    24         </bean>
    25     
    26         <bean id="userService" class="com.shore.service.UserService">
    27             <property name="userDao" ref="userDao"></property>
    28         </bean>    
    29         
    30         <bean id="userAction" class="com.shore.action.UserAction" scope="prototype"><!-- prototype:多例 -->
    31             <property name="userService" ref="userService"></property>
    32         </bean>   
    33 </beans>

    测试类:

     1 package com.shore.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import com.shore.action.UserAction;
     7 
     8 /**
     9  * @author DSHORE/2019-10-15
    10  * 
    11  */
    12 public class MyTest {
    13     @Test
    14     public void test() {
    15         // 创建IoC容器
    16         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    17         UserAction userAction = (UserAction) context.getBean("userAction");
    18         System.out.println("UserAction返回给struts.xml的值:" + userAction.save());
    19     }
    20 }

    测试结果:

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/11680766.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    toad 快捷键大全
    validateRequest 相关的作用
    为何有着良好设计的系统代码反而不容易看懂?
    致命错误: zlib.h:没有那个文件或目录
    全局变量相互依赖和初始化顺序的解决办法
    解决“possibly undefined macro: AC_PROG_LIBTOOL”
    Rsync完全配置
    undefined reference to `clock_gettime'
    解决“configure: line 2747: g: command not found”
    openssl编程轻松入门(含完整示例)
  • 原文地址:https://www.cnblogs.com/dshore123/p/11680766.html
Copyright © 2011-2022 走看看