(1)用BeanWrapper管理Bean 示例:
Class object=Class.forName("com.wl.Helloworld").newInstance();
BeanWrapper bw=new BeanWrapperImpl(object);
bw.setPropertyValue("msg","Helloworld");
bw.setPropertyValue("date",new Date());
(2)用BeanFactory管理Bean 实际上BeanFactory是实例化、配置和管理众多Bean的“容器”
BeanFactory是一个接口,有多个实现,但是最常用的是XmlBeanFactory
示例: ClassPathResource res=new ClassPathResource("config.xml");
XmlBeanFactory factory=new XmlBeanFactory(res);
HelloWorld helloworld=(HelloWorld)facotry.getBean("HelloWorld");
(3)使用ApplictionContext管理Bean ApplicationContext是建立在BeanFactory的基础之上的,
增加了其它的功能:国际化、资源访问、事件传递等。
示例:ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
HelloWorld helloworld=actx.getBean("HelloWorld");
------------------------------------------------------------------------------------------------------------------------------------
ApplictionContext的国际化支持
示例: 在config.xml文件中定义如下的Bean
<bean id="messageSource"<!--名字必须为这个,不可以改--> >
message.properties中 HelloWorld=问候语:{0} 时间{1}
测试代码: ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Object[] objs=new Object{"helloworld",Calendar.getInstance().getTime()};
String msg=actx.getMessage("HelloWorld",objs,Locale.CHINA);
<!--可能会出现问题,尽管指定了Locale.CHINA。此时可以用命令进行转换:native2ascii messages.properties messages.txt 然后把messages.txt中的内容复制到原来messages.properties文件中,再次输出结果就会正常显示中文-->
<!--可能会出现问题,尽管指定了Locale.CHINA。此时可以用命令进行转换:native2ascii messages.properties messages.txt 然后把messages.txt中的内容复制到原来messages.properties文件中,再次输出结果就会正常显示中文-->ApplictionContext的资源访问
ApplicationContext接口继承了ResourceLoader接口,开发人员可以使用getResourece()来指定资源文件的URL来存取
ApplicationContext对资源文件的存取在设定“资源文件的路径”上有3中方式:
(1)通过虚拟路径来存取,如果资源文件位于CLASSPATH下,
示例:ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Resource resource=actx.getResource("classpath: messages.properties");
注意:这里的classpath是spring约定的URL虚拟路径
(2)通过实际路径来存取,指定标准的URL 。如:file:或者http:
示例:ApplicationContext actx=new FileSystemXmlApplicationContext("conf.xml");
Resource resource=actx.getResource("file:d:/eclipse/workspace/me.properties");
(3)通过相对路径来存取
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Resource resource=actx.getResource("WEB-INF/src/messages.properties"):
取得一个Resource后,便可用getFile()来存取文件,exist()判断是否存在等等。
------------------------------------------------------------------------------------------------------------------------------------
ApplictionContext的事件传递
ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的,通过ApplicationEvent的publisEvent来通知ApplicationListener
示例: 一 定义一个LogEvent extends ApplicationEvent ,然后这个类被ApplicationContext发布出去
二 LogListener implements ApplicationListener 那么ApplicationContext会在发布LogEvent事件时,通知LogListener。
三 Log implements ApplicationContextAware通过publisEvent(),带入LogEvent,来通知LogListener。
具体代码在spring从入门到精通3的第10页 附件中有相应的代码截图
问题:在ListView、gridview滚动过程中checkbox错位问题
解决办法:在adapter中给checkbox添加监听事件之前。设置成:
(1)checkBox.setOnCheckedChangeListener(null);设置完成后,
(2)在添加checkbox的监听事件:
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//TODO
}
});
这样就可以解决listview在滚动过程中checkbox错位问题。
我是在http://stackoverflow.com/这里找到的解决办法,在这里记录下用来以后学习用。
在理解了Spring的AOP后,需要重点理解的三个概念是:Pointcut Advice Advisor
(1)切入点 Pointcut
在介绍Pointcut之前,有必要先介绍 Join Point(连接点)概念。
连接点:程序运行中的某个阶段点,比如方法的调用、异常的抛出等。比如方法doSome();
Pointcut是JoinPoint的集合,它是程序中需要注入Advice 的位置的集合,指明Advice要在什么样的条件下才能被触发。
org.springframework.aop.Pointcut接口用来指定到特定的类和方法,
//源代码
public Interface Pointcut{
//用来将切入点限定在给定的目标类中
ClassFilter getClassFilter();
//用来判断切入点是否匹配目标类的给定的方法
MethodMatcher getMethodMatcher();
Pointcut TRUE=TruePointcut.INSTANCE;
}
在Pointcut接口中主要有两个接口:ClassMatcher和MethodMatcer,有利于代码的重用。
(2)通知Advice
它是某个连接点所采用的处理逻辑,也就是向连接点注入的代码。例如:输出的日志信息 就是一个Advice
(3)Advisor
Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码