[原创]spring及springmvc精简版--IOC

本篇博客为自己学习spring和springmvc的一个总结。主要以代码为主,至于文字性描述理解性东西,可以自行百度。有认识不妥的地方,还望指出,相互学习。

以前很困惑spring中的一些概念,在学习过程中遇到了很都问题,目前基本解决。解决的方法:

① 总结Spring框架的运行流程:在框架中,程序如何运行的?流程是什么?  可以适当的参考一部分源码解析

②  理解IOC本质。因为spring是一个容器框架,所以就是用来装东西的,就像tomcat,作用服务器一样。而IOC就是spring通过主配置文件(applicationContext.xml)的相关配置,为我们程序中自动的(底层通过反射方式,反射在框架中用的很过,私底下自己也在继续的深入的研究)为程序创建我们想要的bean对象。在spring中称之为注入,而所依赖的正是applicationContext.xml的配置。

配置方式:spring中提供了两种配置方式:基于xml方式的配置和基于注解的配置。对于前者可以实现对bean的统一的,清晰的,管理,但是需要手动的写,很麻烦(程序天生的就是为人的懒惰而服务);对于后者当然开发时候自己写的东西就少了,但是在统一管理方面稍差。凡事存在即合理。可以根据自己的需求选择自己的配置方式。

③  理解AOP。java是一种面向对象的语言。而AOP是面向切面,在我看来是面向逻辑或者业务编程,它是对一组逻辑的抽象和分配

经典例子,很多系统都有日志。以登录为例子。常规编程流程大致如下:点击登录--->写入日志--->后台处理--->写入日志。因为我们的系统中会有很多功能逻辑代码都是如此去处理日志。假设有一天,需求改变不需要日志了。那么我们如何去处理这些已经存在于整体逻辑单元中的日志代码?无非是找到每一个使用日志的地方,逐一删除。大家可想这样的效率?代码的耦合度?

而AOP变成。就是为了高度的解耦儿产生。它将登录的整个流程进行按照特定的,共同的业务逻辑进行切割,从而抽象出来了一组公共的逻辑单元。然后在根据不同业务模块的需求,在某些业务指定的地方将公共的业务逻辑植入其中,从而形成了一个整体的业务逻辑单元,实现某一模块功能。(这些是自己思考,总结的,刚开始接触的时候,没有理解到这点,也吃了很多闭门羹)有了这样的认识和理解,我们理解spring AOP中的一些常用的概念就很简单:

    横切关注点:哪些业务需要拦截,拦截后干什么?

切面:若干个横切关注点的抽象结合。即:抽象出来的公共的业务逻辑单元

   连接点:需要拦截的业务。原本剩下的业务逻辑

切入点:连接点的表达式。和通知相似。

     通知:将共同的逻辑代码植入的提示。前置,后置,异常,返回,环绕。

IOC:控制反转,依赖注入。配置bean

1.注入方式:setter方法注入,构造器注入,复杂类型注入

 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:context="http://www.springframework.org/schema/context"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
11     <!--
12     person p = new person();
13     p.setname("lisi");
14      -->
15      <!-- setter方法注入:1-空构造  2-属性提供setter方法 -->
16     <bean id="p" class="com.bena.Person">
17         <property name="anme" value="lisi"></property>
18     </bean>
19     <!-- person p1 = new person("lisi",23); -->
20     <!-- 构造器注入:前提:必须提供对应的构造器 -->
21     <bean id="p1" class="com.bena.Person">
22         <constructor-arg value="lisi"></constructor-arg>
23         <constructor-arg value="23"></constructor-arg>
24     </bean>
25     <!-- 复杂类型注入 -->
26     <bean id="addr" class="com.bena.Addrs">
27         <property name="sheng" value="shanxi"></property>
28         <property name="shi" value="xian"></property>
29     </bean>
30     <bean id="person1" class="com.bena.Person1">
31         <property name="name" value="zhangsan"></property>
32         <property name="age" value="23"></property>
33         <!-- <property name="addr" ref="addr"></property> -->
34         <property name="addr">
35         <!-- 匿名对象 -->
36             <bean class="com.bena.Addrs">
37                 <property name="sheng" value="shanxi"></property>
38                 <property name="shi" value="xian"></property>
39             </bean>
40         </property>
41     </bean>
42
43 </beans>

2.继承,模式改变,自动注入(byName,byType)

 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:context="http://www.springframework.org/schema/context"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd" default-autowire="byName">
11     <!-- 继承 -->
12     <bean id="animal" class="com.bean2.Animal" abstract="true">
13         <property name="name" value="123"></property>
14         <property name="age" value="23"></property>
15     </bean>
16     <!-- 默认单例,通过:scope改变模式:prototype:原型(非单例) -->
17     <bean id="student" class="com.bean2.Student" parent="animal">
18         <property name="num" value="123456"></property>
19     </bean>
20
21     <bean id="teacher" class="com.bean2.Teacher" parent="animal">
22         <property name="jixiao" value="12312"></property>
23     </bean>
24
25     <!-- 自动注入:在beans里添加:default-autowire属性
26            值:1-byName:根据名字注入:bean的id要跟类中的属性名相同
27             2-byType:根据类型注入:只能有一个该类型的bean跟属性的类型匹配
28      -->
29     <bean id="dao" class="com.bean3.Dao"></bean>
30     <bean id="service" class="com.bean3.Service"></bean>
31     <bean id="handler" class="com.bean3.Handler"></bean>
32
33 </beans>

3.自动扫描

 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:context="http://www.springframework.org/schema/context"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd" default-autowire="byName">
11
12 <!-- 配置扫描路径 -->
13     <context:component-scan base-package="com.bean4"></context:component-scan>
14
15 </beans>

3.注解方式:举例我所接触的注解

@component :标识为spring组件,由spring容器管理

  @Autowired:设置自动注入bean。 默认名字为与当前bean的类一致,首字母小写。

  @Service:业务层Bean。一般作用于服务层的类,dao层,service层

  @Controller:展示层Bean。一般用于控制层的类,controller层

  @Repository:应存储层Bean。一般用于model层的类

详细的可以参照: Spring 注解总结

步骤:

1.下载相应的jar包。搭建环境。本人用的是:spring-framework-4.0.0.RELEASE-dist

2.新建java工程:在工程的根目录新建 lib目录,将相关jar导入

           

3.创建bean

Goods

 1 package com.bean;
 2
 3 public class Goods {
 4
 5     private int gid;
 6     private int gprice;
 7     private int gnum;
 8     public int getGid() {
 9         return gid;
10     }
11     public void setGid(int gid) {
12         this.gid = gid;
13     }
14     public int getGprice() {
15         return gprice;
16     }
17     public void setGprice(int gprice) {
18         this.gprice = gprice;
19     }
20     public int getGnum() {
21         return gnum;
22     }
23     public void setGnum(int gnum) {
24         this.gnum = gnum;
25     }
26
27 }

Person

 1 package com.bean;
 2
 3 public class Person {
 4
 5     private String name;
 6     private int age;
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public int getAge() {
14         return age;
15     }
16     public void setAge(int age) {
17         this.age = age;
18     }
19
20 }

Users

 1 package com.bean;
 2
 3 public class Users {
 4
 5     private int uid    ;
 6     private String uname;
 7     private int umoney;
 8     public int getUid() {
 9         return uid;
10     }
11     public void setUid(int uid) {
12         this.uid = uid;
13     }
14     public String getUname() {
15         return uname;
16     }
17     public void setUname(String uname) {
18         this.uname = uname;
19     }
20     public int getUmoney() {
21         return umoney;
22     }
23     public void setUmoney(int umoney) {
24         this.umoney = umoney;
25     }
26
27 }

  

时间: 2024-08-25 09:48:41

[原创]spring及springmvc精简版--IOC的相关文章

[原创]spring及springmvc精简版--AOP

接上一篇:[原创]spring及springmvc精简版--IOC 理解AOP.java是一种面向对象的语言.而AOP是面向切面,在我看来是面向逻辑或者业务编程,它是对一组逻辑的抽象和分配. 经典例子,很多系统都有日志.以登录为例子.常规编程流程大致如下:点击登录--->写入日志--->后台处理--->写入日志.因为我们的系统中会有很多功能逻辑代码都是如此去处理日志.假设有一天,需求改变不需要日志了.那么我们如何去处理这些已经存在于整体逻辑单元中的日志代码?无非是找到每一个使用日志的地方

[原创]spring及springmvc精简版--继承数据源,声明式事物

1.前期:导入c3p0 jar包,相关数据库连接jar包,我用的是mysql 2.关注事物管理器的配置和AOP配置 代码: 核心关注bean配置文件 application.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http:

[原创] RT7 Lite win7旗舰版精简方案

[原创] RT7 Lite win7旗舰版精简方案 墨雪SEED 发表于 2016-1-26 21:23:54  https://www.itsk.com/thread-362912-1-5.html 这是根据一些教程和经验以及我个人的意见修改的精简方案,暂时没发现什么bug,欢迎大家提出来,用以修改.鉴于RT7 Lite这款工具已知的问题,精简完后的文件在system32的目录下缺少drmv2clt.dll,这个可以从原版里添加,以Windows\System32\config目录下softw

spring和springMVC整合注解版helloworld

整合的之前需要从官网上下载spring完整的jar包,我下载的是spring-framework-3.2.2.RELEASE.整合步骤如下: 1.在eclipse中新建一个web项目,将下载的spring的jar包拷入lib目录下,但是spring启动的时候依赖一个commons-logging-1.1.jar的jar包,你需要额外的下载. 2.编写web.xml,配置spring的分发器和spring配置文件的位置.具体内容如下: <servlet> <servlet-name>

Spring、SpringMVC、SpringData + JPA 整合详解

原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ---------------------------------------------------------------------------------------------------------------------------------------------------------- 笔记中提供了大量的代码示例,需要说明的是,大部分代码示例都是本

Spring与SpringMVC的区别

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话可以将SpringMVC类比于Struts. Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,ht

spring、springMvc、springBoot和springCloud的联系与区别

spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc).持久层(jdbcTemplate)等都提供了多种配置解决方案: 2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分: springMvc和springBoot: 1. springMvc属于一个企业WE

logback与Spring、SpringMVC结合使用教程

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.versio

springMVC 注解版

关于Spring MVC注解 @Transactional 事务标签 @InitBinder 标签 分类: Java开发 源代码分享2012-06-14 10:59 7721人阅读 评论(2) 收藏 举报 springmvcjavaemailpathstring 主要用到了spring-aop-2.5.6.jar的AOP支持包! 之前我们在AccountService中加入了注解@Transactional标签,但是要想要真正发挥事务作用,还需要一些配置. 主要需要调整dao.xml文件 dao