Spring Ioc基础总结
2015-08-12 21:09
686 查看
1 Spring是一个解决企业应用的一个web容器,它的核心技术是IOC和AOP.
2 IoC 控制反转:
之前创建对象,需要手动去new,自己决定如何创建对象。在spring容器中,通过配置bean,来获取对象,让spring容器代替我们管理对象,这就是控制反转。
ApplicationContext继承于BeanFactory。
注入需要有属性声明和set方法。
3 用注解的方式完成注入:
(1) 在applicationContext.xml里的xsi:schemaLocation加入:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
(2)被注入的属性值的set方法上加 @Autowired
在userService的bean中并没有配置属性userDao;
userDao的set方法上面加了注解 @Autowired完成该属性的注入;
使用注解的方式可以不用对要注入的属性进行引入,但是必须声明过这种属性的bean。
4 使用@resource注解进行注入:
@resouce注入资源,设置在要注入的属性set方法上,默认按名字查找,找不到再按类型,此时和@autowired相同。
@Autowired,按类型完成装载。
(1)在applicationContext.xml加入下面两句,声明使用注解和设置注解自动扫描的包。
<context:annotation-config/>
<context:component-scan base-package="com.sp.temp"></context:component-scan>
(2)@Component(value="userDao") @Resource(name="userDao") value和name要一致
说明:spring常用的几个bean组件,@Component和@Repository,@service,@controller后面三个组件还没有扩展其他内容,和第一个组件作用一样。在spring容器启动的时候会加载配有这些组件的bean,相当于在xml里配置了bean.
@Resouce 注入资源,经常是注入上面的那几个组件资源。
2 IoC 控制反转:
之前创建对象,需要手动去new,自己决定如何创建对象。在spring容器中,通过配置bean,来获取对象,让spring容器代替我们管理对象,这就是控制反转。
package com.sp.temp; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext sc=new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao ud=(UserDao) sc.getBean("userDao"); System.out.println(ud.getAge()+":"+ud.getStr()); List<String> list=ud.getList(); for(String str:list){ System.out.println("list:"+str); } Set<String> set=ud.getSet(); for(String s:set){ System.out.println("set:"+s); } Map map=ud.getMap(); Set<String> keys=map.keySet(); for(String s:keys){ System.out.println(s+":"+(String)map.get(s)); } } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="<a target=_blank href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>" xmlns:xsi="<a target=_blank href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:context="<a target=_blank href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>" xmlns:tx="<a target=_blank href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a>" xmlns:aop="<a target=_blank href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a>" xsi:schemaLocation="<a target=_blank href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a target=_blank href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a> <a target=_blank href="http://www.springframework.org/schema/aop">http://www.springframework.org/schema/aop</a> <a target=_blank href="http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">http://www.springframework.org/schema/aop/spring-aop-2.5.xsd</a>"> <bean name="userDao" class="com.sp.temp.UserDao"> <property name="age" value="10"></property> <property name="str" value="test"></property> <property name="list"> <list> <value>张三</value> <value>李四</value> <value>王五</value> </list> </property> <property name="set"> <set> <value>张三</value> <value>张三1</value> </set> </property> <property name="map"> <map> <entry> <key><value>zg</value></key> <value>中國</value> </entry> <entry> <key><value>mg</value></key> <value>美国</value> </entry> </map> </property> </bean> <bean name="userService" class="com.sp.temp.UserService"> <property name="userDao" ref="userDao"></property> </bean> </beans>
ApplicationContext继承于BeanFactory。
注入需要有属性声明和set方法。
3 用注解的方式完成注入:
(1) 在applicationContext.xml里的xsi:schemaLocation加入:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
(2)被注入的属性值的set方法上加 @Autowired
<?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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <bean name="userDao" class="com.sp.temp.UserDao"> <property name="age" value="10"></property> <property name="str" value="test"></property> <property name="list"> <list> <value>张三</value> <value>李四</value> <value>王五</value> </list> </property> <property name="set"> <set> <value>张三</value> <value>张三1</value> </set> </property> <property name="map"> <map> <entry> <key><value>zg</value></key> <value>中國</value> </entry> <entry> <key><value>mg</value></key> <value>美国</value> </entry> </map> </property> </bean> <bean name="userService" class="com.sp.temp.UserService"> </bean> </beans>
在userService的bean中并没有配置属性userDao;
package com.sp.temp; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; public class UserService { private UserDao userDao; private String str; public UserDao getUserDao() { return userDao; } @Autowired public void setUserDao(UserDao userDao) { this.userDao = userDao; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }
userDao的set方法上面加了注解 @Autowired完成该属性的注入;
使用注解的方式可以不用对要注入的属性进行引入,但是必须声明过这种属性的bean。
4 使用@resource注解进行注入:
@resouce注入资源,设置在要注入的属性set方法上,默认按名字查找,找不到再按类型,此时和@autowired相同。
@Autowired,按类型完成装载。
(1)在applicationContext.xml加入下面两句,声明使用注解和设置注解自动扫描的包。
<context:annotation-config/>
<context:component-scan base-package="com.sp.temp"></context:component-scan>
<?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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <context:component-scan base-package="com.sp.temp"></context:component-scan> </beans>
(2)@Component(value="userDao") @Resource(name="userDao") value和name要一致
package com.sp.temp; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.stereotype.Component; @Component(value="userDao") public class UserDao { private int age; private String str; private List list; private Set set; private Map map; public String getStr() { return str; } public void setStr(String str) { this.str = str; } public List getList() { return list; } public void setList(List list) { this.list = list; } public Set getSet() { return set; } public void setSet(Set set) { this.set = set; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.sp.temp; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service(value="userService") public class UserService { private UserDao userDao; private String str; public UserDao getUserDao() { return userDao; } @Resource(name="userDao") public void setUserDao(UserDao userDao) { this.userDao = userDao; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }
说明:spring常用的几个bean组件,@Component和@Repository,@service,@controller后面三个组件还没有扩展其他内容,和第一个组件作用一样。在spring容器启动的时候会加载配有这些组件的bean,相当于在xml里配置了bean.
@Resouce 注入资源,经常是注入上面的那几个组件资源。
相关文章推荐
- java向上转型和向下转型
- spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoClassDefFound
- 工具--将java项目JAR包打包成.exe程序
- JAVA 中XML的解析
- mysql类型与java类型对应异常场景
- SpringMVC 详解
- Java 程序-利用UserAgent判断客户端系统平台及浏览器的
- java\sdk\platform-tools\adb.exe' and can be executed.
- 【leetcode】Power of Two【java】
- Spring中的Aop即:面向切面
- java.lang.OutOfMemoryError: PermGen space(Myeclipse)
- Java——基本数据类型对象包装类
- Java final关键字用来修饰类、方法、属性
- 【java】 内部类
- 【leetcode】【Numbers of 1 bits】java >>> &符号
- Java日志框架——Logback的体系结构
- java异或运算交换两个数的陷阱
- [leetcode-130]Surrounded Regions(java)
- Java从键盘输入值
- Java ImageIcon 不能显示问题