`

Spring 基础知识

 
阅读更多
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基础知识汇总 Java开发必看

    Spring基础知识汇总Java开发必看

    以下是对Spring基础知识的详细讲解: 1. **依赖注入(Dependency Injection, DI)** 依赖注入是Spring的核心特性,它允许组件之间松耦合。通过容器管理对象的创建和对象之间的依赖关系,而不是在代码中硬编码依赖。...

    Spring基础知识详解

    下面将对Spring的基础知识进行详细的解释。 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性,它允许开发者通过外部配置来管理对象及其依赖关系,而不是在代码中硬编码这些依赖。这样可以提高代码...

    java及spring基础知识pdf

    资源包含如下: 1,JAVA_IO详解_包括讲解IO中各种流及其用法.pdf 2,Java集合排序及java集合类详解.pdf 3,JDBC入门电子书.pdf 4,Spring源代码解析.pdf 5,第三章 Servlet 最佳实践.pdf

    Spring的基础知识.pptx

    【Spring基础知识】 Spring是一个广泛使用的Java企业级应用程序框架,主要设计目的是降低模块间的耦合度,提供一种轻量级的开发方式。Spring的核心特性包括依赖注入(IoC)和面向切面编程(AOP)。它不仅关注业务层...

    spring基础进阶技巧200篇.zip

    《Spring基础进阶技巧200篇》是一本关于Spring框架的资源,它提供了200篇文章,涵盖了Spring框架的基础知识和...这本资源适合已经具备一定Spring基础知识的开发人员,希望进一步深入学习和应用Spring框架的技术人员。

    Spring基础教程文字版

    Spring基础知识点详细说明: 1. Spring框架介绍: Spring是一个开源的Java/Java EE全功能栈轻量级框架,为现代Java企业应用提供了全方位的编程和配置模型。Spring包括了管理业务对象的一致的方法,并且激励了一种...

    spring基础视频教程.txt

    ### Spring基础知识点详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,它提供了全面的基础架构支持,让开发者能够轻松地构建企业级应用。Spring的核心特性包括依赖注入(Dependency Injection, DI...

    spring学习资料大全

    这个文件名可能是某种简化版的Spring教程,可能包含易于理解的Spring基础知识和常见概念,例如: - **XML配置**:介绍如何通过XML文件配置Spring Bean。 - **注解驱动开发**:使用注解进行依赖注入和配置。 - **...

    Spring基础知识简单回顾

    【Spring框架基础】 Spring框架是Java开发领域中不可或缺的一部分,它的出现是为了应对企业级应用开发的复杂性。Spring框架的核心特性是控制反转(IoC)和面向切面编程(AOP),这两个特性大大简化了Java应用的构建...

    1-1.Spring基础.md

    ### 1-1.Spring基础知识点解析 #### 一、Spring框架概述 - **Spring框架**是一种轻量级的开源JavaEE框架,旨在简化企业级应用的开发。 - **轻量级**体现在其较小的体积(较少的jar包)以及能够独立运行的能力。 - ...

    Spring基础教程

    本教程旨在为初学者提供详尽的Spring基础知识,帮助你快速掌握这个强大的企业级应用开发框架。 首先,我们要理解Spring的核心概念——依赖注入(Dependency Injection,DI)。在传统的编程中,对象会自行创建它所...

    SpringRecipes

    1. **Spring基础知识** - **依赖注入(DI)**:介绍Spring框架中最基础也是最核心的概念——依赖注入。这一概念使得组件之间的依赖关系可以通过配置文件来管理,而不是硬编码在程序中。 - **面向切面编程(AOP)*...

    Spring4资料

    - **Spring基础知识**:介绍Spring框架的基本概念和核心组件。 - **依赖注入详解**:深入讲解依赖注入的原理及其在Spring中的应用。 - **面向切面编程实践**:教授如何使用Spring AOP进行日志记录、性能监控等。 - *...

Global site tag (gtag.js) - Google Analytics