`

spring基础学习笔记

阅读更多
OR M
O:对象,自己定义一个class,属性为private ,set与get方法
R:relational关系型数据库
M:mapping。*.hbm.cfg定义类与表的映射,变量与字段的映射,当没有column字段时,默认column=name
  
-----------------------
读取配置文件:(整个工程只初始化一次)
Configuration cfg=new Configuration();
cfg.configure("config.cfg.xml");
SessionFactory sessionFactory=cfg.buildSessionFactory();


--------------
模板代码
Session session=null;
Transaction tx=null;
try{
    session=sessionFactory.openSession();
    tx=session.beginTransaction();
    ..............代码
    tx.commit();
}catch(Exception e){
    if(tx!=null){
        tx.rollback();
     }
     throw e;

}finally{
      if(session!=null)session.close();
}

---------------------------------------------------------
在*.xml配置文件中设置bean
<bean id="helloWorld" class="spring.bean.HelloWorld">
	<!-- 为属性赋值 ,通过set方法-->
	<property name="name" value="zouhuiying"></property>
</bean>
<bean id="book" class="spring.bean.Constructor1">
         <!--通过构造方法赋值-->
	 <constructor-arg value="math"></constructor-arg>
	 <constructor-arg value="180"></constructor-arg>
         <!--通过index(构造方法中变量的索引)标识,或者type(变量的类型)-->
</bean>
![CDATA[]]特殊字符
<value></value>:
<bean id="book" class="spring.bean.Constructor1">
  <constructor-arg>
    <value>![CDATA[<math^>]]</value>
  </constructor-arg>
</bean>

内部bean
<bean id="" class="">
  <property name="">
    <!--内部bean不能被外部使用,所以可以不加id属性-->
    <bean class="">
      <constructor-arg>
         <value><![CDATA[<math>*]]></value>
      </constructor-arg>
    </bean>
  </property>
</bean>

赋值为null:
<constructor-arg><null/></constructor-arg>

级联属性赋值(内部类的属性):属性需要先初始化后,才可以为级联属性赋值,否则处异常
-------------------------------------------------------
配置集合属性
list<car>
<property name="">
  <list>
    <ref bean="" />
  </list>
</property>

------------
使配置map属性
<property name="">
<map>
  <entry key="" value-ref="">
  </entry>
</map>
</property>

-------------
<bean>
  <property>
    <props>
      <prop key="">value</prop>
      <prop key="">value</prop>
    </props>
  </property>
</bean>

-------------
配置单例的集合bean
<property name="car" ref="cars">
<util:list id="cars">
<ref bean="car1"/>
<ref bean="car2"/>
</util:list>

------------

p:命名空间
xmlns:p="http://www.springframework.org/schema/p"
<bean id="person2" class="spring.bean.Person" p:name="baobao" p:age="23" p:car-ref="car1" />

---------------
配置properties属性值
Properties类
private Properties properties;
<bean id ="datasource" class="spring.bean.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">zouhuiying</prop>
</props>
</property>
</bean>

-------------------------------------------------------
获取bean
首先获取IOC容器ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
即:加载配置文件,获取IOC容器后,系统会自动执行配置文件中bean的set方法和构造函数
HelloWorld hello=(HelloWorld) ctx.getBean(HelloWorld.class); //通过类名
Constructor1 con=(Constructor1) ctx.getBean("book2");//通过id

--------------------------------------------------------
自动装配
autowire=""

byName:set方法的名字bean的id //map bean不能自动装配
byType:class的类型。只能有一个bean
-----------------------------------------------------------
配置的继承parent  parent="person"
abstract="True" 抽象bean不能被实例化
如果没有指定class,必须要设置abstract="True"
子类重写父类的property时,只能用父类已经用过的属性

bean直接的依赖
depends-on="某个bean的id
-----------------------------------------------------------
bean的作用域
使用<bean></bean>是默认是sscope=ingleton单例,每次调用都是同一个bean
设置scope属性prototype(原型)每次用bean时,都是产生一个新的bean,初始化IOC容器时,并不初始化该bean

-----------------------------------------------------------
使用外部属性文件
spring要连接数据库,需要配置dataSource bean,class="系统的datasource"

<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>

${var}
--------------------------------------------------------------
spring语言表达式:SpEL
#{...} //...代表SpEL,动态赋值
value="#{'gggggggg'}" //直接赋值
T():引用系统函数
#{T(java.lang.Math).PI * 80}
-----------------------------------------------------------------
bean生命周期
init-method="init"  //自己写初始化和销毁方法
destroy-method="destroy"
ClassPathXmlApplicationContext对象有个close方法
ApplicationContext没有close方法

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beanss.xml");
        Car car=(Car) ctx.getBean("car");
        System.out.println(car);
        ctx.close();
}

<bean id="car" class="spring.beans.Car" p:brand="Audi" p:color="red" init-method="init" destroy-method="destroy" />

bean的后置处理器:不需要配置id,IOC容器自动识别
MyBeanPostProcessor继承BeanPostProcessor接口,实现方法postProcessAfterInitialization与postProcessBeforeInitialization(Object bean, String beanName)
配置文件:
<bean class="spring.beans.MyBeanPostProcessor" />	

-----------------------------------------------------------------------------------
通过调用静态工厂方法创建 Bean
class Car
public class StaticFactory {
	private static Map<String, Car> cars=new HashMap<String, Car>();
	static{
		cars.put("car1", new Car("house","red"));
		cars.put("car2", new Car("audi","white"));
		
	}
	public static Car getCar(String name){
		return cars.get(name); //调用的是car的工厂方法
	}	
}

配置文件:
<bean id="car1" class="springfactory.StaticFactory" factory-method="getCar">
	  <constructor-arg value="car1"></constructor-arg>
</bean>

main函数
ApplicationContext ctx=new ClassPathXmlApplicationContext("factory.xml");
Car car=(Car)ctx.getBean("car1");
System.out.println(car);

----------------------------
通过调用实例工厂方法创建 Bean
public class InstanceFactory {
	private Map<String, Car> cars=null;
	public InstanceFactory() {
		super();
		cars=new HashMap<String, Car>();
		cars.put("one", new Car("ford","yellow"));
		cars.put("two", new Car("anta","green"));	
	}
	public Car getCar(String name) {
		return cars.get(name);
}

配置文件:
<!-- 配置实例工厂 -->
<bean id="factory" class="springfactory.InstanceFactory"></bean>
<bean id="car2" factory-bean="factory" factory-method="getCar">
<constructor-arg value="two"></constructor-arg>
</bean>

------------------------------------------------------------------
通过FactoryBean配置bean


-------------------------------------------------------------------
配置扫描包,多个包用“,”分隔
<context:component-scan base-package="com.zou.service"></context:component-scan>
@Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 标识持久层组件
@Service: 标识服务层(业务层)组件
@Controller: 标识表现层组件
resource-pattern :过滤包
<context:include-filter> 子节点表示要包含的目标类
<context:exclude-filter> 子节点表示要排除在外的目标类
<context:component-scan> 下可以拥有若干个 <context:include-filter> 和 <context:exclude-filter> 子节点
A类引用B类,在B类上加 @Autowired (@Resource 、@Inject)
@Autowired 注解自动装配具有兼容类型的单个 Bean属性
构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解
默认情况下, 所有使用 @Authwired 注解的属性都需要被设置. 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false
默认情况下, 当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter 已指定注入 Bean 的名称
@Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
@Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
@Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值
分享到:
评论

相关推荐

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    SpringCloud学习笔记

    【SpringBoot核心特性】 SpringBoot是Spring框架的一个扩展,它旨在简化Spring应用程序的开发过程,...这份学习笔记涵盖了SpringBoot的基础特性和SpringCloud的负载均衡实践,对于深入理解这两个技术有极大的帮助。

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    spring指南学习笔记

    标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    Java Spring框架学习笔记(内附源码).pdf

    通过学习Spring框架的学习笔记,开发者能够掌握Spring框架的基础知识和高级特性,应用到实际的企业级应用开发中去。对于希望深入学习Java企业级开发的开发者而言,Spring框架是必须要掌握的重要技术。

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    学习笔记:尚硅谷Spring6基础篇

    ### 学习笔记:尚硅谷Spring6基础篇 #### 一、Spring框架概述 ##### 1.1 Spring是什么? Spring是一款主流的Java EE轻量级开源框架,由“Spring之父”Rod Johnson提出并创立。Spring的主要目标是简化Java企业级...

    spring-boot学习笔记

    ### Spring Boot 学习笔记知识点总结 #### 一、Spring发展史 - **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地...

    Spring学习笔记.zip

    根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    springcloud学习笔记.zip

    它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

    spring的学习笔记

    以上内容涵盖了Spring框架的关键知识点,从IoC和DI的使用,到AOP和资源管理,再到强大的SpEL表达式语言,这些都是理解和掌握Spring框架所必备的基础。通过深入学习这些内容,不仅有助于日常开发,也能为面试做好充分...

    Spring Boot 学习笔记完整教程.pdf

    1. Spring Boot基础:了解什么是Spring Boot,以及它的优点,例如内置服务器、生产就绪特性(监控、健康检查、外部化配置等)。 2. Spring Boot Hello World:学习如何通过简单的几步创建一个Spring Boot应用,这...

    spring2.5学习笔记以及SSH

    总的来说,这篇Spring 2.5学习笔记涵盖了Spring的基础知识,如面向抽象编程、Jdom使用、Spring环境搭建以及核心特性IOC和DI的实现。同时,它也涉及到了SSH整合的相关内容,为开发者提供了全面学习Spring以及如何与...

    springcloud学习笔记.docx

    11. **Spring Cloud Starters**:是基于 Spring Boot 的基础组件,提供了一组模块化的依赖,方便快速构建 Spring Cloud 应用。 12. **Spring Cloud CLI**:Spring Boot 的命令行接口插件,用于快速创建 Spring ...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    spring2.5 学习笔记

    【Spring 2.5 学习笔记】 在深入学习Spring 2.5的过程中,我们可以了解到一系列关键的概念和技术。首先,面向抽象编程是Spring的核心理念之一,它鼓励开发者编写可重用且松散耦合的代码,通过接口而非具体实现进行...

Global site tag (gtag.js) - Google Analytics