Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2150|回复: 5
打印 上一主题 下一主题

西安领航培训Spring3视频教程_源码

[复制链接]

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
跳转到指定楼层
楼主
发表于 2016-12-4 23:37:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
链接:http://pan.baidu.com/s/1hrAPHY0 密码:ytcu
回复

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
沙发
 楼主| 发表于 2016-12-4 23:45:07 | 只看该作者
回复 支持 反对

使用道具 举报

32

主题

53

帖子

202

积分

认证用户组

Rank: 5Rank: 5

积分
202
板凳
发表于 2017-2-28 21:36:02 | 只看该作者
本帖最后由 jeesite 于 2017-3-5 11:44 编辑

IOC概念解析

Spring是一个IOC容器,利用DI技术管理对象之间的依赖!
---IOC: Inversion of Control(控件反转)
---DI: Dependency Injection(依赖注入)

简单理解就是: new一个对象 new Message();
转成字符串配置
msg = MessageFactroy.create("2");

1=cn.com.xalead.spring.Message
2=cn.com.xalead.spring.NewMesssage



如下依赖关系表示yyif
、A类是B类中的(某中方法的)局部变量;
  1. public class UserAction implements BeanFactoryAware{
  2.         private UserManager manager = null;
  3.         
  4.         public void setManager(UserManager manager) {
  5.                 this.manager = manager;
  6.         }
  7. //////////////////
复制代码
<bean id="userManager" class="cn.com.xalead.spring.UserManager" scope="prototype">  多例
                   <property name="username">   内部变量
                           <value>root</value>
                   </property>
                   <property name="password">
                           <value>root</value>
                   </property>
                   <property name="url">
                           <value>jdbc:mysql://localhost:8080/3305</value>
                   </property>
           </bean>
           <bean id="userAction" class="cn.com.xalead.spring.UserAction" scope="singleton">  单例
                   <property name="manager">  内部变量
                           <ref parent="userManager"/>  依赖注入  引用对象
                   </property>
           </bean>

可以用 local  parent(淘汰) 和 bean   指定对象引用范围

set方法(属性)注入
  1.         <bean id="userAction" class="cn.com.xalead.spring.UserAction" scope="singleton">
  2.                    <property name="manager">
  3.                            <ref bean="userManager"/>
  4.                    </property>
  5.                    <property name="list">
  6.                            <list>
  7.                                    <value>2222</value>
  8.                                    <ref local="cur"/>
  9.                            </list>
  10.                    </property>
  11.                    <property name="set">
  12.                            <set>
  13.                                    <value>Hello</value>
  14.                                    <value>234.22</value>
  15.                                    <value>22222</value>
  16.                                    <value type="java.lang.String">true</value>
  17.                            </set>
  18.                    </property>
  19.                    <property name="map">
  20.                            <map>
  21.                                    <entry key="a1">
  22.                                            <value>afasfdsfa</value>
  23.                                    </entry>
  24.                                    <entry key="a2">
  25.                                            <value>34345</value>
  26.                                    </entry>
  27.                            </map>
  28.                    </property>
  29.                    <property name="props">
  30.                            <props>
  31.                                    <prop key="x1">adsfas</prop>
  32.                                    <prop key="x2">34534</prop>
  33.                            </props>
  34.                    </property>
  35.            </bean>
  36.            <bean id="cur" class="java.util.Date"/>
复制代码
构造注入及注意事项  不能循环调用
  1.            <bean id="a" class="cn.com.xalead.spring.A">
  2.                    <constructor-arg index="4" ref="cur"/>
  3.                    <constructor-arg value="10"/>
  4.                    <constructor-arg value="zhangsan"/>
  5.                    <constructor-arg value="1111"/>
  6.                    <constructor-arg value="M"/>
  7.            </bean>
复制代码


自动注入
  1. <bean id="userAction" class="cn.com.xalead.spring.UserAction"
  2.                 scope="singleton" autowire="byType"/>
复制代码
回复 支持 反对

使用道具 举报

32

主题

53

帖子

202

积分

认证用户组

Rank: 5Rank: 5

积分
202
地板
发表于 2017-3-5 12:13:58 | 只看该作者
本帖最后由 jeesite 于 2017-3-5 13:11 编辑

通过注解注入
  1. <!-- 启用注解注入 -->
  2.         <context:annotation-config/>
复制代码
  1. public class UserAction{
  2.         
  3.         @Resource
  4.         private UserManager manager = null;
复制代码
自动组件扫描及分层
  1. <!-- 启用组件扫描 -->
  2.         <context:component-scan base-package="cn.com.xalead"/>
  3.         
  4.         
  5.         @Service("userService")
  6. public class UserService {
  7.         @Resource(name="userManager")
  8.         private UserManager userManager;
  9.         
  10.         
  11.         @Repository("userManager")
  12. public class UserManager {


  13. @Controller("uAction")
  14. //@Scope("prototype")
  15. public class UserAction{
  16.         @Resource(name="userService")
  17.         private UserService userService;
复制代码
@Service   @Repository  @Controller   作用都等同于 @Component  把对应在类在类中注入 不用再单独写到xml文件
回复 支持 反对

使用道具 举报

32

主题

53

帖子

202

积分

认证用户组

Rank: 5Rank: 5

积分
202
5#
发表于 2017-3-5 14:26:22 | 只看该作者
本帖最后由 jeesite 于 2017-3-5 15:04 编辑

使用Spring的最大理由:
---Spring拥有声明式的事务管理的能力
---在Spring之前,只有EJB能做到这一点

编程式事务管理的两难选择

AOP(Aspect-OrientedProgramming,面向方面编程
要设计良好的架构,必须做到关注点分离,这样可以产生高内聚、
低耦合的系统,这是美丽的终极原则。
AOP也是关注分离思想的一种体现。
EJB(sun的JavaEE服务器端组件模型 Enterprise JavaBean)技术虽然在后期受到了一些诟病,
但是它的架构设计总体上仍然是非常漂亮的。
EJB实现了分布式计算、持久、实例化、缓冲、事务、安全性等关注点的分离。

穿衣   //关注点
吃饭   //关注点
工作.... //真正业务
吃饭  //关注点
睡觉  //关注点


分离方进化:
1.面向过程编程,封装到独立的函数中。
2.由不同的类实现(OOP)
3.提取接口由代理类实现关注点功能,直接调用代理的接口类功能 (做正事之前后进行拦截)  ---静态代理  面向切面的编程
严重问题:
我的侍从与皇帝的太监实现相同的功能,要重写相同代码


通过动态代理  解决

回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
6#
发表于 2017-3-12 12:29:13 | 只看该作者
AOP(Aspect-OrientedProgramming,面向方面编程)  基于 动态代理  实现
  1.         <bean id="m" class="cn.com.xalead.spring.DynamicProxyFactory" factory-method="newInstance">
  2.                 <constructor-arg ref="me"/>
  3.                 <constructor-arg ref="servant01"/>
  4.                 <constructor-arg ref="servant02"/>
  5.                 <constructor-arg ref="servant03"/>
  6.                 <constructor-arg ref="servant04"/>
  7.         </bean>
  8.        
  9.         <bean id="k" class="cn.com.xalead.spring.DynamicProxyFactory" factory-method="newInstance">
  10.                 <constructor-arg ref="king"/>
  11.                 <constructor-arg ref="servant01"/>
  12.                 <constructor-arg ref="servant02"/>
  13.                 <constructor-arg ref="servant03"/>
  14.                 <constructor-arg ref="servant04"/>
  15.         </bean>
复制代码
  1. public class DynamicProxyFactory implements InvocationHandler{
  2.         private DynamicProxyFactory(){}
  3.        
  4.         private Servant01 servant01;
  5.         private Servant02 servant02;
  6.         private Servant03 servant03;
  7.         private Servant04 servant04;
  8.        
  9.         private Object target;//目标对象
  10.        
  11.         /**
  12.          * 创建代理类对象的方法
  13.          * @param target 准备创建的代理类要代理的目标对象
  14.          */
  15.         public static Object newInstance(Object target,Servant01 servant01,Servant02 servant02,Servant03 servant03,Servant04 servant04){
  16.                 DynamicProxyFactory dp = new DynamicProxyFactory();
  17.                 dp.servant01 = servant01;
  18.                 dp.servant02 = servant02;
  19.                 dp.servant03 = servant03;
  20.                 dp.servant04 = servant04;
  21.                 dp.target = target;
  22.                 return Proxy.newProxyInstance(target.getClass().getClassLoader()
  23.                                                                           , target.getClass().getInterfaces(),
  24.                                                                           dp);
  25.         }
  26.         @Override
  27.         public Object invoke(Object proxy, Method method, Object[] args)
  28.                         throws Throwable {
  29.                 servant01.makeBeds();//关注点
  30.                 servant02.dress();//关注点
  31.                 servant03.haveAMeal();//关注点
  32.                
  33.                
  34.                 Object o = method.invoke(target, args);//调用动态代理类代理的目标对象上的方法(真正要调用的业务方法)
  35.                
  36.                 servant03.haveAMeal();//关注点
  37.                 servant01.makeBeds();//关注点
  38.                 servant04.undress();//关注点
  39.                 return o;
  40.         }
  41. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 04:17 , Processed in 0.063195 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表