如何清楚描述spring


总的来说spring是一个容器,核心就是个bean ,通过spring容器来对对象的管理,通过配置文件来实现spring对对象的管理。
1. IOC和AOP
IOC:控制反转。控制权由对象本身交给了spring容器,比如我们在java代码中,每次调用其他类的非静态方法时,都要new一个,某个java类可能要引用好多其他类,就new好多次,这样耦合度很高,现在我通过spring容器来管理对对象的生成,当用户需要哪个bean的时候,直接注入就行,降低耦合度,
AOP: 面向切面编程,使用代理模式增强处理的对象。比如,日志文件,一个系统里面好多都要用到日志,如果每个类都写处理日志文件的类,会增加代码的冗余度,然后我们重新写一个代理,这个类就是个代理类。使用代理模式,然后在配置文件中配置扫描那些需要增强的类,之后就不会在每个类中都写处理日志的代码。减少代码冗余度。

当我们在一个切面类里使用@Before来标注一个方法时,该方法将作为Before增强处理,使用@Before标注时通常要指定一个value属性值,用来指定一个切入点表达式(既可以是一个已有的切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入那些切入点。 

   
注意:("execution(* cn.huaxia.spring.*.*(..))")第一个星号后面一定要有一个空格。
//定义一个切面
@Aspect
publicclass BeforeAdviceTest {
    // 执行cn.huaxia.spring包下的所有方法都做为切入点
    @Before("execution(* cn.huaxia.spring.*.*(..))")
    publicvoid authority() {
    System.out.println("模拟执行权限检查...");
    }
}    
上面@Aspect@标注BeforeAdviceTest 表明该类是一个切面类,在该切面里定义了一个authority()方法,这个方法本来没有什么特别之处,但是因为使用@Before来标注该方法,这就将该方法转换成一个增强处理。上面程序中使用@Before Annotation标注时,直接指定切入点表达式,指定cn.huaxia.spring下的所有方法都作为切入点。
 
@Component
publicclass Chineseimplements Person {
    @Override
    public String sayHello(String word) {
        return word;
    }
    publicvoid eat(String food) {
        System.out.println("我正在吃" + food);
    }
}

@Aspect
publicclass AfterReturningAdviceTest {
    @AfterReturning(pointcut="execution(* cn.huaxia.spring.*.*(..))",returning="obj")
    publicvoid log(Object obj){
        System.out.println("获取目标方法返回值"+obj);
        System.out.println("模拟日志记录功能....");
    }
}

从上面Chinese类的代码来看,他是一个如此纯净的Java类,他丝毫不知将被谁来进行增强处理,也不知道将被怎样增强处理---正式这种无知才是"AOP"最大的魅力:目标类可以被无限增强。

<!-- 指定自定搜索Bean组件、自动搜索切面类-->
<context:component-scanbase-package="cn.huaxia.spring">
<context:include-filtertype="annotation"
expression="org.aspectj.lang.annotation.Aspect"/>
</context:component-scan>
<!-- 启动AspectJ支持-->
<aop:aspectj-autoproxy/>
</beans>

2 两种注入方式:setter注入。构造器注入。

3. 事物管理

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。

开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值