简述建设网站的步骤,现在做网站还有出路吗,我要自学网网站建设与管理,电商公司怎么运营和管理[1] SpringIOC创建对象的单例和多例模式
问题: Spring容器对象根据配置文件创建对象的时机默认发生在Spring容器对象在被创建的时候,也就是说,我们一旦获取到Spring容器对象,意味着可以直接获取Spring容器中的对象使用了.那么,如果我对同一个bean对象,连续获取N次,获取到的是不…[1] SpringIOC创建对象的单例和多例模式
问题: Spring容器对象根据配置文件创建对象的时机默认发生在Spring容器对象在被创建的时候,也就是说,我们一旦获取到Spring容器对象,意味着可以直接获取Spring容器中的对象使用了.那么,如果我对同一个bean对象,连续获取N次,获取到的是不是同一个对象呢?因为spring容器对象底层使用的是map集合存储的bean对象,对map集合按照同一个键名获取数据,获取的是同一个,也就说按照同一个键名从Spring容器中获取的都是同一个对象,那么如果我们希望相同的键名获取的对象每次都不一样,怎么实现? 解决: 不要在Spring容器对象创建的时候,就完成对象的初始化创建,而是变为,从Spring容器中获取的时候才创建,每次获取都重新创建. 实现: Spring容器的单例和多例模式创建对象. 单例模式(默认): 设置了单例模式的bean,会在Spring容器对象被创建的时候 就完成初始化创建,无论获取多少次都是同一个对象. 多例模式: 设置了多例模式的bean,在Spring容器对象被创建的时候不会被初 始化创建,每次获取的时候都会重新创建,每次获取的对象都不相同. 使用:
applicationcontext.xml:
?xml version1.0 encodingUTF-8?
beansxmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--SpringIOC设置对象的单例模式和多例模式创建对象单例模式默认模式在bean标签上使用scope属性默认值为singleton多例模式在bean标签上使用scope属性设置值为prototype--bean idstu classcom.java.pojo.Student scopesingleton/beanbean idtea classcom.java.pojo.Teacher scopeprototype/bean
/beansTestIocModel
package com.java.controller;
import com.java.pojo.User;
import com.java.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.async.WebAsyncUtils;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.rmi.CORBA.StubDelegate;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(value /user, loadOnStartup 1)
public class UserServlet extends HttpServlet {public static void main(String[] args) {//获取Spring容器对象ApplicationContext ac new ClassPathXmlApplicationContext(applicationcontext.xml);Student stu (Student) ac.getBean(stu);Student stu2 (Student) ac.getBean(stu);Teacher teacher (Teacher) ac.getBean(stu);Teacher teacher2 (Teacher) ac.getBean(stu);System.out.println(学生(stustu2));System.out.println(教室(teacherteacher2));}
}
[2] SpringIOC的自动注入
问题: 在学习了SpringIOC的DI依赖注入后,我们可以根据对象之间的依赖关系的 责任链,让Spring容器对象帮我们创建有一个组装好的对象,比如A中有B,B 中有C,C中有D.将A,B ,C,D都创建为Bean对象,然后使用ref属性告诉Spring 对象之间的依赖关系的组装规则,假如依赖责任链特别长,使用ref注入就会很 麻烦.怎么办? 解决: 不要声明ref属性来指明依赖关系的注入,只需要告诉Spring容器对象依赖关 系的注入规则,Spring容器对象自动根据规则完成依赖关系的注入. 实现: ①根据bean的ID和属性名一致的规则 ②根据bean的类型和属性的类型一致的规则 ③根据构造器形参的类型和bean的类型一致的规则 ④不能使用自动注入,只能手动声明 ⑤使用默认规则 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsddefault-autowirebyName!--设置自动注入--!--自动注入:在标签上使用autowire属性设置自动注入规则.该属性声明在要注入资源的bean标签上,比如:学生的beanautowire属性的值:byName:按照属性名和某个bean的id相同的规则自动注入byType:按照属性的类型和某个bean的类型相同的规则自动注入.注意:同类型的bean只能有一个,否则报错.constructor:必须声明对应的构造器,根据构造器形参的类型和某个bean的类型相同的规则自动注入.no:不使用自动注入,必须使用ref手动注入.default:使用默认注入规则.默认值.注意:可以在beans顶层元标记中使用属性default-autowire声明全局自动注入规则.--bean idstu classcom.java.pojo.Student autowirebyName!--用构造器的方法此处要创建一个只有Teacher一个参数的构造器--!--constructor-arg index0 typecom.Teacher reftea/constructor-arg--property namesid value1/propertyproperty namesname value张三/property/beanbean idteacher classcom.bjsxt.pojo.Teacherproperty nametname valueliu/propertyproperty nametid value1/property/bean
/beans