1.面向接口(抽象)编程的概念与好处(属于Spring的特性) 好处:灵活,解耦 Service(业务逻辑层) Dao(数据库访问层,屏蔽不同数据库的访问,接口类,不同的实现类可以注入) Bean(实体类) 2.Spring 的两个特性 IOC/DI Inversion of control(控制反转) 对象的创建,由Spring容器读取配置文件进行自动创建,而非自己写代码来进行创建。 dependency injection(依赖注入) 将对象的依赖,通过spring容器读取配置文件进行创建并注入。 Spring的作用 1.实例化具体bean 2.动态装配 3.如何创建user library? Windwos -> preferences -> User Libraries -> New Windwos -> preferences -> User Libraries -> Add JARs 4.Spring配置文件 <beans ... default-autowire="byName" default-lazy-init="true"> <bean id="u" class="com.anker.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.anker.service.UserService"> <property name="userDAO" bean="u"/> </bean> </beans> property属性是在Bean对象实例化后,才注入的。 default-autowire 自动装配:(指bean中的引用对象,自动在配置文件中寻找相同名字或者类型的bean进行注入) 包含两种: byType 根据类型进行自动匹配 byName 根据名字自动匹配 default-lazy-init(默认为false) Bean的生命周期:(每次类ClassPathXmlApplicationContext新建时,会自动创建所有的bean对象) 当设置为true,即意味着不自动创建bean对象, 当有用到此bean时,调用getBean方法时,才会创建 Scope 用于设置Bean的创建方式: singleton:(单例,默认为单例) prototype:(每次创建新对象) property标签 用于设置注入bean对象中的引用对象 bean中可以设置(不常用) init-method(初始化Bean时执行的方法,bean创建后执行的方法) destroy-method (在Bean被销毁的时候,调用的方法。执行context.registerShutdownHook方法时会执行此指定的方法)。 initializingBean DisposableBean接口 当Bean类实现initializingBean接口,在bean被初始化时,spring容器自动调用afterPropertiesSet方法 在Bean类实现DisposableBean接口,在bean被摧毁时,Spring自动调用destroy方法。 作用,跟上面的xml文件配置是一样的。 afterPropertiesSet方法是在对象创建后调用的。 5.spring集合注入: <bean> <property name="sets"> <set> <value>1</value> <value>2</value> </set> </property> <property name="lists"> <list> <value>1</value> <value>2</value> <value>3</value> </list> </property> <property name="maps"> <map> <entry key="1" value="1"></entry> <entry key="2" value="2"></entry> <entry key="3" value="3"></entry> </map> </property> </bean> 6.FactoryBean 针对对象的创建过程比较复杂,采用工厂类来创建。 在Spring中,只要类实现了FactoryBean接口,即为Bean工厂类,它实际上返回的对象为getObject()方法的返回。 通过工厂类,可以灵活的控制对象的初始化过程,根据不同情况创建不同的对象。 public UserManager getObject() throws Exception { System.out.println("create UserManager region="+region);//创建其他对象前,可以提前获取前置条件的输入参数值 UserManager re= new UserManager(); if(region.equal("1")) re.setUserDao(userDao) else{ re.setUserDao(userDao2); }; System.out.println(this.region); return re; } 7.PlaceHolder 占位符 占位符,将某些参数存放在配置文件中,然后读取配置文件进行获取。这样减少更改源代码的机会。 配置的方法:<context:property placeholder location="xxxx/conf.properties"> ${region},当遇到此类占位符,将从配置的文件中寻找key为region的键值对,并将赋值。 8. BeanFactoryPostProcessor Bean类总工厂的后置处理器 Bean工厂的后置处理器,指在通过xml文件配置Bean之后,对Bean的创建方法可以进行修改、重新定义。(比如占位符的替换,其实就是后置处理器在起作用)。ye3w 需要继承BeanFactoryPostProcessor接口,然后在XML中像配置普通的Bean一样进行配置即可。 继承PriorityOrdered,指定权限数字,用于当多个Bean工程类总工厂执行的顺序 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { BeanDefinition bd = beanFactory.getBeanDefinition("userManager"); //获取bean的定义 MutablePropertyValues pv = bd.getPropertyValues(); String oldValue = ((TypedStringValue) pv.getPropertyValue("region").getValue()).getValue(); Object obj; if ("hz".equals(oldValue)) { //根据设置的参数,注入不同的Dao对象 obj = beanFactory.getBean("userDao1"); } else { obj = beanFactory.getBean("userDao2"); //getBean时创建Bean对象 } String newRegion = "{" + oldValue + "}"; pv.addPropertyValue("region", newRegion); //增加注入参数值 pv.addPropertyValue("userDao", obj); //增加注入对象 } 9.BeanPostProcessor Bean接口切面 此接口可以实现对对象进行重新包装返回,比如对传递过来的类进行返回它的子类等。 类实现接口BeanPostProcessor即可,然后在xml文件中配置,既可以实现在Bean初始化方法前后进行添加内容。 此接口存在两个方法,Object postProcessBeforeInitialization(Object bean,String beanName)(第一个参数为实例化类的object,) 在类init-method方法之前,被调用,此时类已执行初始化方法。 Object postProcessAfterInitialization(Object bean,String beanName) 在类初始化之后,被调用。 10.AOP: 面向切面编程,是面向对象的思维方式的有力补充。 好处:可以动态的添加和删除切面上的逻辑而不影响原来的代码。 11.如何调整Tomcat的内存设置 Tomcat的启动参数位于tomcat目录\bin,windows系统为catalina.bat文件 linux系统改为catalina.sh windows添加内容: set JAVA_OPTS= -server -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M -server: tomcat默认以-client模式启动,-server意味着更好的性能 -Xms:JVM堆内存初始值 -Xmx:JVM堆内存最大值 -Xmn:JVM堆内存最小值 -XX:PermSize设置非堆内存初始值,默认是物理内存的1/64(内存4GB,4*1024/64 = 64MB) -XX:MaxPermSize设置最大非堆内存的大小 默认是物理内存的1/4。 在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。 Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。 堆是在 Java 虚拟机启动时创建的。 在JVM中堆之外的内存称为非堆内存(Non-heap memory)。 非堆就是JVM留给自己用的, 方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、 每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 12.web项目中,如何利用spring自动初始化bean对象 ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息 <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> 默认的路径是"/WEB-INF/applicationContext.xml, 如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/DefaultContext.xml</param-value> </context-param> 13.eache缓存框架的使用 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 使用指定配置文件创建 CacheManager manager = CacheManager.create("src/config/ehcache.xml"); 取得配置文件中预先 定义的sampleCache1设置,生成一个Cache Cache cache = manager.getCache("sampleCache1"); 删除cache CacheManager singletonManager = CacheManager.create(); singletonManager.removeCache("sampleCache1"); 3.使用Caches (1)往cache中加入元素 Element element = new Element("key1", "value1"); cache.put(new Element(element); (2)从cache中取得元素 Element element = cache.get("key1"); (3)从cache中删除元素 Cache cache = manager.getCache("sampleCache1"); Element element = new Element("key1", "value1"); cache.remove("key1"); 3.卸载CacheManager , 关闭Cache manager.shutdown(); 所以大概步骤为: 第一步:生成CacheManager对象 第二步:生成Cache对象 第三步:向Cache对象里添加由key,value组成的键值对的Element元素 ehcache.xml是ehcache的配置文件,并且存放在应用的classpath中。 下面是对该XML文件中的一些元素及其属性的相关说明: <diskStore>元素:指定一个文件目录, 当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下。 <defaultCache> : 默认cache maxElementsInMemory: 缓存对象的最大数 eternal: 如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false; timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,超过这个时间,EHCache即把它从内存中清除。 timeToLiveSeconds: 设定允许对象存在于缓存中的最长时间。 overflowToDisk: 如果为true,表示当基于内存的缓存中的对象数目达到了 maxElementsInMemory界限后, 会把益出的对象写到基于硬盘的缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。
相关推荐
Spring基础知识汇总 Java开发必看
以下是对Spring基础知识的详细讲解: 1. **依赖注入(Dependency Injection, DI)** 依赖注入是Spring的核心特性,它允许组件之间松耦合。通过容器管理对象的创建和对象之间的依赖关系,而不是在代码中硬编码依赖。...
下面将对Spring的基础知识进行详细的解释。 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性,它允许开发者通过外部配置来管理对象及其依赖关系,而不是在代码中硬编码这些依赖。这样可以提高代码...
资源包含如下: 1,JAVA_IO详解_包括讲解IO中各种流及其用法.pdf 2,Java集合排序及java集合类详解.pdf 3,JDBC入门电子书.pdf 4,Spring源代码解析.pdf 5,第三章 Servlet 最佳实践.pdf
【Spring基础知识】 Spring是一个广泛使用的Java企业级应用程序框架,主要设计目的是降低模块间的耦合度,提供一种轻量级的开发方式。Spring的核心特性包括依赖注入(IoC)和面向切面编程(AOP)。它不仅关注业务层...
《Spring基础进阶技巧200篇》是一本关于Spring框架的资源,它提供了200篇文章,涵盖了Spring框架的基础知识和...这本资源适合已经具备一定Spring基础知识的开发人员,希望进一步深入学习和应用Spring框架的技术人员。
Spring基础知识点详细说明: 1. Spring框架介绍: Spring是一个开源的Java/Java EE全功能栈轻量级框架,为现代Java企业应用提供了全方位的编程和配置模型。Spring包括了管理业务对象的一致的方法,并且激励了一种...
### Spring基础知识点详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,它提供了全面的基础架构支持,让开发者能够轻松地构建企业级应用。Spring的核心特性包括依赖注入(Dependency Injection, DI...
这个文件名可能是某种简化版的Spring教程,可能包含易于理解的Spring基础知识和常见概念,例如: - **XML配置**:介绍如何通过XML文件配置Spring Bean。 - **注解驱动开发**:使用注解进行依赖注入和配置。 - **...
【Spring框架基础】 Spring框架是Java开发领域中不可或缺的一部分,它的出现是为了应对企业级应用开发的复杂性。Spring框架的核心特性是控制反转(IoC)和面向切面编程(AOP),这两个特性大大简化了Java应用的构建...
### 1-1.Spring基础知识点解析 #### 一、Spring框架概述 - **Spring框架**是一种轻量级的开源JavaEE框架,旨在简化企业级应用的开发。 - **轻量级**体现在其较小的体积(较少的jar包)以及能够独立运行的能力。 - ...
本教程旨在为初学者提供详尽的Spring基础知识,帮助你快速掌握这个强大的企业级应用开发框架。 首先,我们要理解Spring的核心概念——依赖注入(Dependency Injection,DI)。在传统的编程中,对象会自行创建它所...
1. **Spring基础知识** - **依赖注入(DI)**:介绍Spring框架中最基础也是最核心的概念——依赖注入。这一概念使得组件之间的依赖关系可以通过配置文件来管理,而不是硬编码在程序中。 - **面向切面编程(AOP)*...
- **Spring基础知识**:介绍Spring框架的基本概念和核心组件。 - **依赖注入详解**:深入讲解依赖注入的原理及其在Spring中的应用。 - **面向切面编程实践**:教授如何使用Spring AOP进行日志记录、性能监控等。 - *...