当前位置: 首页 > spring > Spring资源加载

Spring资源加载

资源加载处理

 XML |  复制 |? 
01
02
从类路径中加载资源,classpath:和classpath:/是等价的。都是相对于类的根路径。资源文件可以在标准的文件系统中,也可以在.jar或.zip的类包中。
03
classpath:com/kuxun/beanfactory/beans.xml
04
 
05
使用UrlResource从文件系统目录中装载资源,可采用绝对或者相对路径
06
file:/conf/com/kuxun/beanfactory/beans.xml
07
 
08
使用UrlResource从Web服务器中装载资源
09
http://www.kuxun.cn/resource/beans.xml
10
 
11
使用UrlResource从FTP服务器中装载资源
12
ftp://www.kuxun.cn/resource/beans.xml
13
 
14
没有前缀,根据ApplicationContext具体实现类采用对应类型的Resource
15
com/kuxun/beanfactory/beans.xml
16
 
17
其中还有一种是classpath*:前缀。假设有多个JAR包或文件系统类路径都拥有一个相同的包名com.kuxun。"classpath:"只会在第一个加载的com.kuxun包下查找;而classpath*:会到扫描所有这些jar包及类路径下出现的com.kuxun类路径。
18

自动装配类型

 XML |  复制 |? 
1
2
byName 根据名称进行自动匹配。
3
byType 根据类型进行自动匹配
4
constructor 与ByType类似,只不过它是针对构造函数注入。
5
autodetect  根据Bean的自省机制决定采用ByType还是constructor进行自动配置;如果Bean提供了默认的构造函数,则采用ByType,否则采用constructor
6
 
7

Bean作用域 scope=”singleton”

 XML |  复制 |? 
1
2
singleton   在SpringIOC容器中仅存一个Bean实例,Bean以单实例的方式存在。
3
prototype   每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行 new XxxBean()的操作
4
request     每次Http请求都会创建一个新的Bean,不同HttpSession使用不同的Bean。该作用域仅适用于WebApplicationContext环境
5
session     同一个HttpSession共享一个Bean,不同HttpSession使用不同的Bean。该作用域仅适用于WebApplicationContext环境
6
golalSession同一个全局Session共享一个Bean,适用于Portlet应用环境。该作用域仅适用于WebApplicationContext环境\\
7

使用注解定义Bean

 XML |  复制 |? 
01
02
@Component("userDao")  Spring容器自动将POJO转换为容器管理的Bean
03
@Respository           用于对DAO实现类进行标注
04
@Service               用于对Service实现类进行标注
05
@Controller            用于对Controller实现类进行标注
06
如果使用注解进行Bean加载
07
在需要在配置文件中增加:
08
<context:component-scan base-package="com.kuxun">
09
	<context:include-filter type="regex" expression="com\.kuxun.\anno.*"/>
10
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
11
</context:component-scan>
12
xml命名空间中需要增加:
13
xmlns:context="http://www.springframework.org/schema/context"
14
xsi:schemaLocation增加
15
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
16
一个component-scan可包含多个以下组件
17
context:include-filter 表示要包含的目标类。
18
context:exclude-filter 表示要排除在外的目标类。
19

过滤类型

 XML |  复制 |? 
1
2
annotation 所有标注了xxxAnnotation的类,该类型采用目标类是否标注了某个注解进行过滤。
3
assignable 所有集成或扩展xxxService的类,该类型采用目标类是否继承或扩展某个特定类进行过滤。
4
aspectj    com.kuxun..*Service+ 所有类名以Service结束的类及继承或扩展他们的类。
5
regex      com\.kuxun\.anno\..* 所有com.kuxun.anno类包下的类。该类型采用正则表达式根据目标类的类名进行过滤。
6
custom     com.kuxun.xxxTypeFilter   采用XxxTypeFilter 通过代码的方式根据过滤规则进行过滤。
7
           该类必须实现org.springframework.core.type.TypeFilter接口
8

Bean装载

 Java |  复制 |? 
01
02
@Autowired
03
如果容器没有找到一个和注解变量类型匹配的Bean,Spring容器启动时将抛出NoSuchBeanDefinitionException异常。
04
如果希望Spring找不到匹配Bean完成注入也不要抛出异常。可以改为@Autowired(required=false)
05
@Qualifier
06
如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称。通常与@Autowired同时使用。
07
同时以上2个注解,也可以用于类的方法。
08
@Service
09
public class SwTestService{
10
    private userDao uesrDao ;   
11
@Autowired
12
public void setUserDao(UserDao userDao){
13
	this.userDao = userDao
14
}
15
@Autowired
16
public void setUserDao(@Qualifier("UserDao")UserDao userDao){
17
	this.userDao = userDao
18
}
19
}
20
 
21
@Configuration 将一个POJO标注为定义Bean的配置类
22
@Bean          定义其中的方法为Bean的配置类
23
@Scope("prototype")  定义为多态
24
@import(DaoConfig.class) 将多个配置类组装到一个配置类中
25
 
26
@Configuration
27
@import(DaoConfig.class) 将多个配置类组装到一个配置类中
28
或者
29
@ImportResource("classpath:springContext/applicationContext.xml")
30
public class AppConf{
31
    @Scope("prototype") 
32
@Bean
33
public UserDao userDao(){
34
	return new UserDao();
35
}
36
@Bean(name="otherDao")
37
public TestDao testDao(){
38
	return new TestDao();
39
}
40
}
41
 
42
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConf.class);
43
UserDao userDao = ctx.getBean(UserDao.class);
44
或者
45
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
46
ctx.register(AppConf.class);
47
ctx.refresh();
48

一般使用,“XML+注解”的配置方式,减少使用基于Java类的配置方式。



本文固定链接: http://anyoneking.com/archives/752 | 懒散狂徒的博客
标签: , ,

【上一篇】
【下一篇】

报歉!评论已关闭.