Spring面试问题
- bean注入的两种类型是什么?
有两种,按照Setter注入,和按照构造器注入。
- 什么是自动匹配Auto wiring?
Spring框架将为你寻找需要注入的类自动 注入。
<beans>
<bean id="bar" class="com.act.Foo" Autowire="autowire type"/>
</beans>
- Autowire的类型有几个?
- byName
- byType
- constructor
- autodetect
- ApplicationContext事件和相关的监听者是什么?
下面这些都是org.springframework.context.Application-Event.子类:
- ContextClosedEvent – 当上下文关闭是激活
- ContextRefreshedEvent – 当上下文初始化或刷新时激活。
- RequestHandledEvent – 当上下文处理请求时激活
- Spring AOP有哪些概念?
见: AOP模式
- Spring中的Advice类型有几个?
- Around : 拦截目标方法所有调用
- Before : 在目标方法被调用之前调用
- After : 在目标方法被调用之后调用
- Throws : 当目标方法throws exception时调用
- Around : org.aopalliance.intercept.MethodInterceptor
- Before : org.springframework.aop.BeforeAdvice
- After : org.springframework.aop.AfterReturningAdvice
- Throws : org.springframework.aop.ThrowsAdvice
- AutoProxying有几种类型?
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
- Metadata autoproxying
- Spring中有关所有Exception的Exception是什么?
DataAccessException – org.springframework.dao.DataAccessException
- DAO抛出的Exception是什么?
SQLException 它是DataAccessException子类
- DataAccessException是什么?
它是RuntimeException,并不强迫一定要处理。
- 如何配置从JNDI中获得一个DataSource?
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/myDatasource</value>
</property>
</bean>
- 如何创建一个Spring的DataSource连接池?
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driver">
<value>${db.driver}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
- JDBC如何在Spring使用更有效率?
使用Spring的JdbcTemplate模板模式。
- JdbcTemplate如何使用?
JdbcTemplate template = new JdbcTemplate(myDataSource);
public class StudentDaoJdbc implements StudentDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
more..
}
配置:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="studentDao" class="StudentDaoJdbc">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>
<bean id="courseDao" class="CourseDaoJdbc">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>
- 如何使用JDBCTemplate写数据库SQL操作?
PreparedStatementCreator:
PreparedStatement createPreparedStatement(Connection conn)
throws SQLException;
BatchPreparedStatementSetter:
setValues(PreparedStatement ps, int i) throws SQLException;
int getBatchSize();
- 解释为什么要使用RowCallbackHandler ?
我们通常使用ResultSet逐行浏览记录,但是Spring提供这个接口由用户决定处理哪个具体一行. 这是spring的 isRowCallbackHandler提供.processRow() 方法需要实现,需要对每行记录做什么事情。