1、spring优势
1)轻量级
2)模块化
3)spring-web框架
4)特定的异常捕获
5)IOC、AOP
6)事务管理
2、DI依赖注入:把许多需要的类合在一起,但又保证各自的独立性;注入的两种方式:构造器注入、setter注入
3、AOP
4、Core Container
1)IOC、AOP框架的基本部分
2)Bean提供BeanFactory
3)Context提供配置文件访问对象
4)SpEL 语法
5、 注解
1)@Repository 数据访问层
2)@Component 表示一个组件
3)@Service 业务层
4)@Constroller 控制层
5)@PostConstruct 和 @PreDestroy 初始化和销毁的
6)@autowire
a)no -- 显式指定不使用自动装配
b)byName
c)byType
d)constructor
e)autodetect 有默认构造器则byType否则constructor
7)@Qualifier("ppp") 提供一个 String 类型的值作为候选的 Bean 的名字;至可以作用于方法的参数
8)@Resource JDK自带,默认byName
6、spring的controller是单例还是多例,怎么保证并发的安全?
默认是单例。
保证:
1)不要在controller中定义成员变量。
2)万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。
7、Spring的beanFactory和factoryBean的区别(参考)
1)beanFactory:用于管理Bean的一个工厂,职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
Resource resource = new FileSystemResource("beans.xml");BeanFactory factory = new XmlBeanFactory(resource);Person p = factory.getBean("person");//getType("")、isSingleton("")...
2)factoryBean:接口
public interface FactoryBean{ T getObject() throws Exception; Class getObjectType(); boolean isSingleton();}
8、spring bean 生命周期
1)Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:
默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;scope="prototype",任何一个实例都是新的实例;scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;scope="session",在WEB应用程序中,每一个实例的作用域都为session范围;注意:在默认情况下,Bean实例在被Spring容器初始化的时候,就会被实例化,默认调用无参数的构造方法。在其它情况下,Bean将会在获取实例的时候才会被实例化。
2)Bean可以通过指定属性init-method指定初始化后执行的方法,以及通过指定属性destroy-method销毁时执行的方法。
语法:<bean .... destroy-method="销毁时调用的方法名" init-method="初始化后执行的方法名"/>
9、spring 循环注入的原理
有一个类A,A有一个构造器里面的参数是类B,然后类B里面有个构造器参数是类C,类C里面有个构造器参数是类A,就是我们会发现其实引用循环了A 里面有B的引用,B里面有C的引用,C里面又有A的引用。
10、Timer与Quartz的区别有三点:
1.出身不同:Timer由jdk直接提供,调用方式简单粗暴,不需要其它jar包支持。Quartz并非jdk自带,需要引入相应的jar包
2.能力区别:主要体现在对时间的控制上。某个具体时间执行具什么任务的话Timer可以轻松搞定,而比如每个星期天早上八点提醒做某事的功能就需要Quartz,因此Quartz对时间的控制远比Timer强大,完善
3.底层机制: