`
xuyuanshuaaa
  • 浏览: 389358 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于spring理解

 
阅读更多
Spring容器时产生Bean的工厂(BeanFactory),用于管理容器中的Bean。
   1.IOC(控制反转)
      通过BeanFactory找到相应的Bean,方法是getBean("id")
     id:applictionContext.xml中配置的bean中的id属性
     具体由谁来实现,具体操作中不实现,交由spring来进行处理(即class属性)
   <bean id=""  class="" />
  2.DI(依赖注入)
    让bean与bean之间以配置文件组织在一起,而不是以硬代码的方式耦合在一起

架构在里,应用起来清晰明了。
一切的框架,都是为了让您更关注于业务逻辑,而不为其他的事操心。

企业应用的项目
你就知道IOC和AOP的强大了,小项目一般优势不明显。
现在到了spring3.x已经实现了注解形式,可以更加轻便的进行开发。

spring的IOC和AOP 模式
其实用spring最好的地方就是实现代码的复用。

首先spring的设计原则是非侵入性的,就是实际业务逻辑代码中感觉不到spring框架的存在,spring只是在其中起到一个实例产生的作用,然后把实例分配给需要的对象。这种设计的好事就是可以随时随地的把某个业务逻辑很轻松的从整个系统中抽离出来再在无任何修改的情况下用到其他系统中去。
然后就是切面的编程,这种设计是灵活的操作织入,例如你的某个业务逻辑是执行存款,存款这个业务之前之后都应该有某些附加操作,例如用户登录,检查余额,记录存款日志信息,但是这些不能够放在存款主业务当中,这个时候就可以用面向切面的方式灵活织入到存款业务中,但是这个过程有不需要改变原存款业务代码和逻辑实现。如果将来某个时候这些副业务刚改,例如我不想记录存款日志信息,但是我又要加入打印出存款细节的附加操作,这个时候只要把记录日志剥离出来,再植入打印功能。同样不需要更改源代码。

spring这些设计的终极目标就是避免同样或者相似功能在不同系统中的重复开发而设计的

(1)web Service在启动时都会将一些配置文件中定义的bean都实例化装载进去,这跟我们在使用时,通过new再实例化这个bean的对象然后使用有什么区别,(性能跟快,或还有其他什么优点)
回答:
首先
配置文件中定义的bean并不是都在启动时实例化。
<bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/>
注意bean有一个属性scope,只有在scope没有配置或配置为如上时,启动时才实例化。(如果一个singleton的bean依赖一个 prototype的bean,那么这个prototype的bean在singleton的bean实例化时也会实例化)
如果定义为scope="prototype"那么只有在这个bean被使用时,才实例化,而且每次都是一个新对象,不是单例。
其次:在配置文件中声明bean使得spring可以管理这些bean,比如声明式事物功能,就需要你的bean在配置文件中配置。在实例化时 spring会为你声明的bean生成一个代理对象,代理对象在调用bean的方法前后加上事务控制逻辑。
备注:spring管理bean这样在bean初始化过程中,spring可以做很多事情,比如你写一个pojo,spring通过配置就能让他成为rmi,就是在实例化过程,对这个pojo做了更多的处理,不只是简单的new一个对象出来。
在比如只有spring管理的bean才支持spring的AOP机制。可以使用Aspectj和spring集成,对非spring管理的 bean施加AOP
再次:减少代码中依赖耦合。
(2) 同样的在配置文件中我们可以ref另外一个bean,这样做又是为什么呢?(我们同样可以使用时new一个这个实例)
回答:
把依赖关系定义在配置文件中。
不要再代码中表现依赖关系,这样在依赖关系有变化的情况下,可以通过配置文件的修改
达到目的,而不需要修改代码。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics