review:
1.Servlet生命周期中初始化方法:init(),init(config)
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
因此,如果我们需要在初始化时执行一些自定义操作,那么我们可以重写无参init()方法
我们可以通过gitConfig()获取ServletConfig对象
可以通过config.getInitParameter()获取初始化参数
2、通过ServletContext获取配置的上下文参数
3、MVC:V:view视图;c:Controller控制器;M:Model模型
模型有很多种类:数据访问模型(DAO);业务逻辑模型(BO);值对象模型(POJO);数据传输对象(DTO)
4、IOC
IOC控制反转/DI依赖注入
控制反转:
1)之前在Servlet中,我们创建Service对象,FruitService fruitService = new FruitServiceImpl();
如果这句话出现在Servlet某个方法内部,那么这个fruitService的作用域(生命周期)应该就是这个方法级别
如果这句话出现在servlet类中,也就是说fruitService是一个成员变量,那么这个fruitService的作用域(生命周期)应该就是这个servlet实例级别
2)之后我们在applicationContext.xml中定义了这个fruitService。然后通过解析XML,产生fruitService实例,存放在beanMap中,
这个在一个BeanFactory中
因此我们转移(改变)了之前的service实例、dao实例等等他们的生命周期。控制权从程序员转移到了BeanFactory中。
这个现象我们就叫做控制反转
依赖注入:
1)之前我们在控制层出现代码是这样写FruitService fruitService = new FruitServiceImpl();
那么控制层和service层存在耦合
2)之后我们修改为FruitService fruitService = null;
然后在配置文件中配置:
<beans>
<bean id="fruitDao" class="com.wenrui.fruit.dao.impl.FruitDaoImpl"/>
<bean id="fruitService" class="com.wenrui.fruit.service.impl.FruitServiceImpl">
<!--property标签用来表示属性,name表示属性名,ref表示引用其他bean的id值-->
<property name="fruitDao" ref="fruitDao" />
</bean>
<!--这个bean标签的作用是:将来servletpath中涉及名字是fruit,那么就要找FruitController这个类来处理-->
<bean id="fruit" class="com.wenrui.fruit.controllers.FruitController">
<property name="fruitService" ref="fruitService" />
</bean>
</beans>