请确保配置bean.xml位于工作路径之下,注意工作路径并不等同于CLASSPATH ,eclipse
的默认工作路径为项目根路径,也就是.project文件所在的目录
Type1 接口注入
((Object)(class.forName("").newInstance())).doSomething();
Type2 设值注入
Type3 构造子注入
PicoContainer(另一种实现了依赖注入模式的轻量级容器)首先实现了Type3类型的依赖注入模式。
Spring Bean封装机制
Spring 大量引入了Java 的Reflection机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory
核心中的核心为BeanWrapper和BeanFactory类
BeanWrapper:
Object obj = Class.forName().newInstance();
BeanWrapper bw = new BeanWrapperImpl(obj)
bw.setPropertyValue("",obj);
//if is a object , must set first.
BeanFactory:
负责创建并维护Bean实例
1.Bean属性值及依赖关系(对其他Bean的引用)
2.Bean创建模式(是否Singleton模式,即是否只针对指定类维持全局唯一的实例)
3.Bean初始化和销毁方法
4.Bean的依赖关系
id,class,init-method,destroy-method,singleton,depends-on[一般不需要]
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("C:/temp/eclipse/springguide/src/main/java/spring2.xml"));
BeanWrapper实现了针对单个Bean的属性设定操作。而BeanFactory则是针对多个Bean的管理容器,根据给定的配置文件,BeanFactory从中读取
类名、属性名/值,然后通过Reflection机制进行Bean加载和属性设定。
特定类的特定方法是否满足条件,满足的话就运用通知。
核心接口:
PointCut:ClassFilter getClassFilter();MethodMatcher getMethodMatcher();
代理target类声明为内部bean
ApplicationContext
覆盖了BeanFactory的所有功能,并提供了更多的特性,包括
1。国际化支持
2。资源访问:支持对文件和URL的访问。
3。事件传播:事件传播特性为系统中状态改变时的检测提供了良好支持。
4。多实例加载:可以在同一个应用中加载多个Context实例。
1。国际化支持
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
</list>
</property>
</bean>
目前Spring中提供了两个MessageSource接口的实现,即ResourceBundleMessageSource和ReloadableResourceBundleMessageSource,后者提供了无需重启即可重新加载配置信息的特性。
2。事件传播
ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传播功能。通过Application. publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。
ApplicationContextAware,ApplicationEvent,ApplicationListener
chapter 4 Resource
Interface
Resource,ResourceLoader,ResourceLoaderAware
Class
FileSystemResource;URLResource;ClassPathResource;ServletContextResource;
ResourceLoader 有四种形式:file:;http:;classpath:;和none
chapter 22 mail
org.springframework.mail.MailSender,
org.springframework.mail.SimpleMailSender,
encapatured cc,from,to,text,subject
MailException rooted exception hiartiche.
org.springframework.mail.javamail.JavaMailSender
org.springframework.mail.javamail.MimeMessagePrepare
mime
chapter 23 schedule with quartz and timer
jpa annotation
ioc
transaction
mapping
1.PrepareStatementSetter, PrepareStatementCreator,SqlProvider
preparestatementsetter
preparestatementcreator,sqlprovider
2.JdbcTemplate.update one column
jdbcTemplate.update(sql,new Object[]{new java.util.Random().nextInt()});
callback preparestatementsetter and preparestatementcreator
Your can also use jdbc type as following
jdbcTemplate.update(sql,new Object[]{new java.util.Random().nextInt()},new int[]{Types.INTEGER});
3.update more than one row
BatchPreparedStatementSetter,
jdbcTemplate.batchUpdate(String sql,BatchPreparedStatementSetter setter);
jdbcTemplate.batchUpdate(String[] sqls);
4.Reading data
RowCallbackHandler.void processRow(java.sql.ResultSet rs)
5.ResultReader[I]
extract a row for reuse
RowMapperResultReader
6.queryForSimpleType
jdbcTemplate.queryForInt
7.Calling stored procedures
4.2.3 Creating operations as objects
SqlUpdate
setDataSource(dataSource);
setSql("insert into test values (?)");
declareParameter(new SqlParameter(Types.INTEGER));
compile();
First, we have to supply our SqlUpdate object with a DataSource. It uses this to create a JdbcTemplate
declareParameter() calls after we configure the SQL,the order in which we issue these statements is important
sequence
constraints
倒出来【】