spring学习笔记一

Spring 学习笔记①:IoC容器、Bean与注入 IoC容器、Bean与注入 阅读详情

spring学习笔记
一、Spring中两个十分重要的概念——IOC/DI & AOP
1.IOC/DI(Inverse of control/Dependence Injection)
IOC:控制反转,看起来比较牛B,说起来十分简单。就是不使用传统的将类的依赖关系用硬编码来维护的方式,而是让容器来管理类之间的依赖,依赖关系在全在一个配置文件上。这样,就将造成耦合的根源——复杂的依赖关系,进行了统一的,集约式管理。

DI:依赖注入,其实就是控制反转。只是比IOC的表达稍微好点,更能望文生意些。依赖注入,简单地说,就是在运行期间,由容器将组件之间的依赖关系注入到组件中。

IOC/DI的作用:有了这样的设计,我们只需要专心编写一个个高内聚的零件,而不用关心这些零件如何组合起来工作。这个问题是由依赖关系的配置文件需要关注的。这样将组件和依赖分离,提高了组件的可重用性。

三种IOC/DI方式:
1.接口注入:
  将实现类的对象赋给接口的引用。实现类的对象是通过配置文件描述,由容器负责创建的。
  注意:目前部门使用的BS,就是这种方式。
2.值注入:
  通过setxxx方法,将依赖关系注入到某个具体的对象中。Spring使用最多的依赖注入方式就是值注入。
3.构造子注入:
  容器调用实现类的购造器,将依赖作为构造器的参数注入,一次性构建一个稳定的对象。

后两种依赖注入方式的比较:
1.值注入:自然,直接,简洁,但不稳定(如果在set的时候发生并发访问,可能会出现很严重的状况)
2.构造子注入:复杂,但很稳定(一次性创建,在创建阶段就将依赖注入了,创建完成后,就已经是一个完成的,稳定的对象),而且可以很好地控制依赖注入的顺序关系。


2.AOP(Aspect Oriented Programming)
AOP:翻译为面向方法编程,网上说比较确切的说法是面向切面编程。我个人认为,说成是面向动作编程好象更加贴切。因为AOP是将某类动作高度内聚的编程方法。

AOP的特点:1.切分动作  2.源代码无关性

AOP在Spring中的应用:事务管理机制

Spring事务管理机制的基本原理:
1.用一个动态Proxy类加载所有的配有事物管理的Bean
2.根据配置的事务触发点做if判断,然后在方法的前后加上事务处理的代码

Spring中的两种AOP方式:
1.Proxy:面向接口
2.CGLIB:面向Class

对于AOP在Spring中的应用还不是十分清楚,需要加强。

二、struts+spring+hibernate 整合
1.在Eclipse中创建项目
2.加入struts
3.加入spring
4.加入hibernate
5.整合struts&spring
  1)通过plug-in将struts与spring对接
  2)通过action的type属性将Action的控制权转给spring/
  3)spring中配置action的实现类
6.整和spring+hibernate
  1)只需要配置spring中的sessionFactory就可以了。十分方便。
  2)为数据库访问类配置spring的事务管理,使得持久层的操作可以在spring的控制范围之内。


(注意:以上内容比较简单,纯属记录个人学习过程。而且由于刚刚接触spring,水平有限。不足之处,请多多原谅)

附:登录模块示例

配置文件部分


Struts配置:struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
  <data-sources />
  <form-beans>
   <form-bean name="loginForm" type="com.neusoft.apps.login.rp.LoginForm"/>
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings>
   <action path="/loginAction"
    type="org.springframework.web.struts.DelegatingActionProxy"
    name="loginForm"
    scope="request"
    parameter="method">
    <forward name="ok" path="/index.jsp"></forward>
    <forward name="failed" path="/login.jsp"></forward>
   </action>
  </action-mappings>
  <message-resources parameter="com.neusoft.apps.ApplicationResources" />
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
  </plug-in>
</struts-config>

 

Spring配置:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation">
   <value>/WEB-INF/classes/hibernate.cfg.xml</value>
  </property>
 </bean>
 
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
 </bean>
 
 <bean id="loginDAO"
  class="com.neusoft.apps.login.bp.LoginBSImp">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
  <property name="hql">
   <value>from LOGIN login where login.aae011=? and login.aae012=?</value>
  </property>
 </bean>
 
 <bean id="loginDAOProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager"/>
  </property>
  
  <property name="target">
   <ref local="loginDAO"/>
  </property>
  
  <property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
 
 <bean name="/loginAction"
  class="com.neusoft.apps.login.rp.LoginAction"
  singleton="false">
  <property name="dao">
   <ref bean="loginDAOProxy"/>
  </property>
 </bean>
 
</beans>

Hibernate配置:hibernate.cfg.xml:略,没什么好看的,就是配了个数据源


代码部分:

Action:

package com.neusoft.apps.login.rp;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.neusoft.apps.login.LoginBS;

public class LoginAction extends DispatchAction{
 
 private LoginBS dao;
 
 public ActionForward login(ActionMapping actionMapping,
   ActionForm actionForm,
   HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  // TODO Auto-generated method stub
  LoginForm form = (LoginForm) actionForm;
  if(dao.isValidUser(form.getAae011(),form.getAae012()))
   return actionMapping.findForward("ok");
  else
   return actionMapping.findForward("failed");
 }

 public LoginBS getDao() {
  return dao;
 }

 public void setDao(LoginBS dao) {
  this.dao = dao;
 }
}

 

DAOImp:

package com.neusoft.apps.login.bp;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.neusoft.apps.login.LoginBS;

public class LoginBSImp extends HibernateDaoSupport implements LoginBS{
 private SessionFactory sessionFactory;
 
 private String hql;
 
 public boolean isValidUser(String username, String password) {
  // TODO Auto-generated method stub
  List userList = this.getHibernateTemplate().find(hql, new Object[]{username,password});
  if(userList.size() > 0)
   return true;
  else
   return false;
 }

 public String getHql() {
  return hql;
 }

 public void setHql(String hql) {
  this.hql = hql;
 }
 
 
}

 
让 AI 学会“慢思考”:MCP Sequential Thinking 深度部署与使用指南 摘要: MCP Sequential Thinking 是一种让AI具备"慢思考"能力的技术,通过动态调整思维路径解决复杂问题。本文详细介绍了在Windows、macOS和Linux系统下的部署方法,包括环境准备、配置文件修改等步骤。该技术通过"产生想法-评估需求-修正路径"的循环机制,显著提升AI在代码设计、数学证明等复杂任务中的表现。文章还提供了验证安装方法、使用示例和常见问题解答,帮助开发者解锁AI的深层思考能力。(149字) 阅读详情

相关推荐

行人重识别(ReID)基础知识入门

行人重识别(Person re-identification)主要目的是针对出现在监控摄像头内的某个目标行人,准确快速地从监控网络其他摄像头内的大量行人中将这个目标行人标识出来。如图所示一个区域有多个摄像头拍摄视频序列,ReID的要求对一个摄像头下感兴趣的行人,检索到该行人在其他摄像头下出现的所有图片。

用于记录 1万+

C++基础::为什么不能cout一个string?

为什么不能cout一个string? 为什么不能ostringstream声明一个字符串输出流?

3万+

先进封装基础知识

想象一下,芯片就像是电脑或手机的大脑,但它非常脆弱,需要被保护起来。芯片封装就是给芯片穿上一件“保护衣”,这件“保护衣”不仅可以保护芯片,还能帮助芯片与外部世界进行沟通。

阿拉伯梳子的专栏 1143

Spring学习笔记(一)

文章目录Spring_day01一、Spring概述1. Spring是什么?2. Spring的优势?3. Spring的体系结构二、IOC的概念和作用三、Spring中的IOC四、Spring的工厂类Spring_day02Spring_day03Spring_day04 Spring_day01 一、Spring概述 1. Spring是什么? Spring 是分层的 Java SE/EE ...

weixin_44270855的博客 451

gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成

城市道路网建模在获得基础路网之后,需要考虑道路交通网络的描述与表达问题。网络是将现实世界中的事物及其关系进行适当的抽象,构造成由节点和边按照一定规则组成的形式。一个实体网络可以由有限个“节点”集合与“边”集合构成的图表示,即网络表示为。对于一个由个节点组成的无权复杂网络,该图有邻接矩阵,这里。根据研究对象不同,建模方法主要包括原始法[1]和对偶法[2]两种,见图1,字母a-j为交叉口编号...

weixin_39761195的博客 3502

从理论到实践:利用FilterSolutions高效设计7阶椭圆低通滤波器

本文详细介绍了如何利用FilterSolutions软件高效设计7阶椭圆低通滤波器。文章从理论入手,对比了巴特沃斯、切比雪夫等经典滤波器特性,阐述了在要求高衰减陡度(如62dB抑制)和严格通带波纹(0.2dB)时,椭圆滤波器是最优选择。通过分步实战教程,指导读者完成从软件参数设置、性能验证到实际电路布局与调试的全过程,助力射频与高速数字信号处理工程师将理论转化为可靠设计。

jupi8的博客 559

Spring 学习笔记 一

BeanFactory BeanFactory 实际上就是实例化,配置和管理众多bean的容器.这些bean通常会彼此合作,因此他们会产生依赖.例如BeanFactory中的配置数据正好反映了这些依赖关系 Org.springframework.beans.factory.BeanFactory 有多个实现.Org.springframework.beans.factory.x

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1226

ITK-snap进行分割区域标注、三维显示及改变显示颜色

在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进

u010409517的博客 2万+

Spring Integration学习笔记一

一、概述        Spring Integration是Spring框架创建的又一个API,面向企业应用集成(EAI)。它是可以理解为一种ESB框架,可以和EJB、RMI、JMS这些标准技术协同使用,使得各个应用之间可以协同通讯。另一个优点是它可以和应用一起部署而不需要单独建立ESB服务器。 二、Spring Integration 组件        1.1、 Messages (消

joinandjoin的专栏 2138

PCL 基于视椎体裁剪点云

PCL 基于视椎体裁剪点云

dayuhaitang1的博客 4083

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1918

一 、 Spring 学习笔记 之 什么是Spring ?

做为程序员在使用一门技术,或者是一门开发语言的时候肯定需要知道 以下几点: 1、 它是 什么? 2、它实现了什么功能? 从这一篇文章,开始Spring的学习,包含 介绍,示例代码 ...等等 什么是 Spring ? 如果想要解释 Spring,那么最难的部分就是对其进行分类。 通常情况下, Spring 被描述为构建 Java 应用程序的 轻量级框架,但这种描述带来了两个有趣...

跳动的石头 235

【MATLAB】工业传送带速度闭环控制与张力联合仿真

本文基于MATLAB/Simulink平台,构建了工业传送带速度闭环控制与张力联合仿真系统。通过搭建驱动模块、机械传动模块、检测模块和控制模块,实现了速度与张力的协同控制。采用双PID调节器分别整定速度与张力参数,经联合调试后系统性能良好:速度跟踪误差小于±0.03m/s,张力波动控制在±30N内,负载扰动恢复时间仅0.3秒。研究提供了从建模到参数优化的完整工程方案,可直接应用于课程设计或工业实践,有效解决了传送带运行中速度偏差与张力波动的协同控制难题。

unber的博客 76

Spring学习笔记一

Spring学习笔记一、Spring是什么?二、Spring的作用三、Spring的常见模块四、IOC是什么五、DI是什么六、Bean标签里四个属性的作用1. Name属性:2. Scope对象作用域属性:3. 对象懒创建(只有在scope = "singleton"才会生效)4. 对象创建完成后调用的方法,和对象销毁后调用的方法七、spring创建对象的四种方式?用无参构造方法创建用带参的构造方...

weixin_46850857的博客 835

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring学习笔记 一

概述 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。 特点 控制反转 IOC 学习Spring时,I...

程序员小潘 3377

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring文档学习笔记一

Spring文档学习笔记一 Spring的宗旨 Spring 使从“普通旧 Java objects”(POJO)build applications 并将企业服务 non-invasively 应用于 POJO。 主要特征 几个核心理念 IoC 大体意思是说,通过在XML等配置文件或注解上配置所需类的依赖描述以及关系,将所需类注册进IoC容器,在类使用时,IoC容器使用依赖注入的方式(底层应该是使用的反射)将其实例化(类似于一个HashMap)中。所以在Spring里由该容器...

zjx1230的博客 210

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Spring学习笔记一】

根据尚硅谷SSM整合视频中老师的笔记加上自己的笔记做的一些学习记录

hongjianxiang的博客 229

Spring Security学习笔记(一)

1、SpringSecurity框架简介 1.1 摘要 Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 主要包括2部分:认证(Authentication)和授权(Authorization) 认证:系统认为用户能否登录 授权:系统判断用户能否有权限去做什么事情 1.2 历史 1.3 同款产品对比 1.3.1 SpringSecurity 和Spring无缝整合 全面的权限控制 专门为web开发而设计 重量级 1.3.2 Shiro 轻量级 通

qq_44815465的博客 517

Spring学习笔记(一)

史上最全的Spring学习笔记,手把手教你学会Spring。SpringWork系统结构、程序的耦合以及解耦合、工厂方式的解耦合、IOC机制的讲解、IOC入门案例、IOC配置文件的详细介绍、手动实现自己的IOC、Bean的实例化四种方式、Bean的作用域、Bean的生命周期、Spring依赖注入、Spring配置文件的模块化、模板设计模式解析、出国留学案例设计......

m0_67226963的博客 1084

Spring系统学习笔记一

本笔记学习自Spring in Action 第三版,包括spring核心,xml配置以及面向切面变成

啊昕的博客 3380
上一篇: php email
下一篇: Spring2.0压缩包内容
eyejava
博客等级 码龄20年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值