学习Spring笔记四

注解

除了使用xml方式配置实现注入(管理对象和对象之间的关系)操作之外,还可以用Annotation来提高我们写代码的灵活性和效率。

annotation方式给我们提供了一个最重要的功能:扫描!component-scan(不扫描怎么知道你在哪个类加上了注解,提到注解就要想到扫描


实例

1.Spring中要使用annotation,需要在配置文件中增加配置,如下是完整的applicationtext.xml

 <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"  
 xsi:schemaLocation="http://www.springframework.org/schema/beans   
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
 http://www.springframework.org/schema/context   
 http://www.springframework.org/schema/context/spring-context-2.5.xsd"

 default-lazy-init="true" >

 
 <context:component-scan base-package="com.bjsxt"></context:component-scan>   <!-- context自动扫描com.bjsxt下的类 -->

<!--component-scan 组件扫描器,用了它后不用配置bean,spring会主动去搜索类,如果不用它,如果你写了类不配置bean,容器是找不到bean的,

          起到了简化配置文件的作用。但有一点,加了扫描器后,spring的启动会变慢,因为会先去扫描类,在项目启动的时候会把IOC容器创建好。

      有的项目启动得花一分钟,解决办法是在beans的开始标签中加 default-lazy-init="true",在用的时候再实例化类-->
 
</beans>


2.UserDao.java

@Component //把普通pojo实例化到IOC容器中,相当于在IOC容器中new的UserDao,和在xml中配置bean是一样的。

public class UserDao{

public UserDao(){

System.out.println("init.....");

}

public void add(){

System.out.println("add....");

}

}



3.UserAction.java

@Component //扫描的时候只会把这些带了注解的类扫描进来,加个括号是给它改名字,默认是以这个类名为名,@Component("ccc")

public class UserAction{

private UserDao userDao;


public UserDao getUserDao(){

return userDao;

}

@Resource(name="userDao")

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

public String add(){

userDao.add();

return null;

}

}


哪个类想进入IOC容器,只需要在它的类名上加@Component,然后在它要建立的关系的方法上写@Resource(name="userDao"),如果你用的是set注入,就在set方法上加,要是你用的是构造器注入,就在构造器上加,就这么简单。用Annotation创建IOC容器的对象的方法就这句话就全讲明白了!


4.接下来测试

Test.java

public class Test{

public static void main(String[] args){

ApplicationContext ac = new ClassPathXmlApplicationContext(

new String[ ]{"ApplicatioinContext.xml"}

);

UserDao userDao = (UserDao) ac.getBean("userDao");   //虽然在xml中没有配置它,但是注解配置了,所以用getBean也是可以获取的。

}

}

执行下看能不能打印初始化中的init

—————————注解 end—————————————————————

IOC讲完啦,就这么简单,管理对象,new一下,给它赋值,建立关联。够了!


*******题外********

对象和对象之间的关系包括:
依赖:对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其它对象的调用关系
关联:对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。
聚合:表示has-a的关系,是一种不稳定的包含关系。聚合类不必对被聚合类负责。使用集合属性表达

********************************************************




AOP面向切面编程 

核心思想是:弹性的设计,利用动态代理的底层实现,为层与层之间,动态植入代码。层和层之间有很多的调用关系。我们往里面植入代码,影响的是层和层之间的交流。

AOP是代码重用的最佳案例。真正达到了写一次用多次的效果。而且是可挺拔式的、插件式的。以前写程序时是要写个功能,需要到多个类里面去修改,删除时也要改动多个类。有了AOP就不用啦。为避免这种情况,AOP是现在大型项目中必备的。


AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。AOP不是实现小功能的,它是用于实现公共设计代码,如权限、系统日志记录、安全控制、事务的管理。新手一般接触不到这方面的实现,或者是人家已经实现好了。AOP并不适合单一功能,所以叫面向切面编程。


一个请求来到服务器,会创建一个线程。这个线程会执行很多的方法,整个项目是由很多线程组成的。AOP是从业务流切入,加入功能,和代理很像。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值