对spring的IOC和aop的学习总结

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。特点是面向接口编程,松耦合。

1:IOC(控制反转)  别名(DI:依赖注入)

首先来一段ioc的实现原来代码:

 1 public class ClassPathXmlApplicationContext implements BeanFactory {
 2     
 3     private Map<String , Object> beans = new HashMap<String, Object>();
 4     
 5     //IOC Inverse of Control DI Dependency Injection
 6     public ClassPathXmlApplicationContext() throws Exception {
 7         SAXBuilder sb=new SAXBuilder();
 8         //解析xml配置文件
 9         Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));
10         Element root=doc.getRootElement(); //获取根元素
11         List list=root.getChildren("bean");//根元素下的子元素
12         for(int i=0;i<list.size();i++) {
13            Element element=(Element)list.get(i);
14            String id=element.getAttributeValue("id");
15            String clazz=element.getAttributeValue("class");
16            Object o = Class.forName(clazz).newInstance(); //反射获得实例
17            System.out.println(id);
18            System.out.println(clazz);
19            beans.put(id, o);
20            //注入bean属性
21            for(Element propertyElement : (List<Element>)element.getChildren("property")) {
22                String name = propertyElement.getAttributeValue("name"); //userDAO
23                String bean = propertyElement.getAttributeValue("bean"); //u
24                Object beanObject = beans.get(bean);//UserDAOImpl instance
25                
26                String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
27                System.out.println("method name = " + methodName);
28                
29                Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
30                m.invoke(o, beanObject);  
31            }
32         }  
33     }
34 
35     public Object getBean(String id) {
36         return beans.get(id);
37     }
38 }
//xml文件
1
<beans> 2 <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl" /> 3 <bean id="userService" class="com.bjsxt.service.UserService" > 4 <property name="userDAO" bean="u"/> 5 </bean> 6 7 </beans>

以上代码实现了将UserDAOImpl注入到userService.

值得注意的是:以上操作都是spring帮我们实现的,我们只需要理解如何配置即可。

spring还提供了bean的生存周期和范围属性:

scope:singleton(单例,即每次调用的对象都为同一个)。  prototype(原型,即以bean对象为原型,每次new一个新对象出来)

init-method="init" destroy-method="destroy"    lazy-init="true"(延迟初始化bean,即spring启动时,不初始化bean,当需要使用时才实例化,作用:但spring启动缓慢时可使用)


现在基本都是用注解实现,但只要能明白spring是如何实现bean的注入,基本原理都是一样的。spring在中间的作用就是帮我们实现元素之前的注入,谁注入到谁就需要用到不同的注解了。

猜你喜欢

转载自www.cnblogs.com/yunian139/p/10511993.html