JavaEE开发第一篇spring基础

本文介绍了Spring框架的基础知识,包括其核心功能、对象管理和依赖注入等,并提供了详细的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

博主从事了一年多的android开发,最近各种机缘巧合转到了java,已经工作了两周,表示工作敲代码照葫芦画瓢没啥问题。但我们不能止于完成工作呀,我们得学后台的框架呀,数据库呀等等,先从spring开始吧,学习路径是第一遍要学会怎么用,然后再去了解spring的工作原理。

Spring简述

在我现在的理解里面他其实最大的功能就是帮我们管理bean对象,我们不需要再去new对象了,需要的时候拿来即可。当然除了管理对象还有一个大的功能就是能帮我们做面向切面编程,去操作数据库的事务,去写日志框架等。现阶段我能用到涉及的核心技术就是Ioc和Aop,其实Aop也不咋用啊。。。

Spring的用法

Sping的创建方式

上面说到spring最大的功能就是帮我们管理对象,那现在我们来看需要怎么操作他才能帮我们管理对象。
先上一个类:Girl(大家都喜欢的类)
public class Girl {

private Integer age;    
private Car car;
public Car getCar() {
    return car;
}
public void setCar(Car car) {
    this.car = car;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public Long getHeight() {
    return height;
}

public void setHeight(Long height) {
    this.height = height;
}
}

public class Car {
public Car(String name) {
    this.name = name;
}
private String name;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

}

那这个类我们配置到spring里面去呢?首先我们需要知道的是spring会有一个配置文件,虽然名字以及位置是不限制的,但是一般情况下我们放在resource下面,然后命名为applicationContext.xml。用idea创建一个spring config的文件默认就是这样:

<beans 
xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   </beans>

我们现在如果想让spring帮我们管理对象,就需要把bean配置到beans里面去,这里我们有三种方式可以配置。

  • 构造方法创建对象
  • 静态工厂创建对象
  • 实例工厂创建对象
    分别来看一下如何配置:

      <!--构造方法创建对象-->
      <beans 
    xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean class="org.thingkingWalker.spring.bean.User" id="user" scope="prototype" init-method="init" destroy-method="destroy"/>
    

解释下:默认就是构造方法创建对象,只需要有class和name就可以了,class是全类名,name是自己指定的名字。 然后其他的比如scope是其他的配置,常用的有两种,singleTon(单例 默认的)和prototype(多例),区别就是创建对象的时候一个是只有一个对象,一个是有很多个对象。然后init-method和destroy-method指的分别是在spring初始化后就会加载的方法和当spring销毁所有对象后会执行的方法。主要是做一些提前或者善后工作。其实这两个就是aop做的事情,原理等我学完怎么用了就去研究。

静态和实例工厂
    public class UserFactory {

public static User createUser(){
    System.out.println("静态工厂");

    return new User();
}

public  User createUser2(){
    System.out.println("实例工厂");
    return new User();
}
}

 <!--静态工厂创建对象-->
<bean class="org.thingkingWalker.spring.bean.UserFactory" name="user2" factory-method="createUser"/>

  <!--实例工厂创建对象-->
<bean class="org.thingkingWalker.spring.bean.UserFactory" id="user3" factory-method="createUser2" factory-bean="userFactory"/>
<bean class="org.thingkingWalker.spring.bean.UserFactory" id="userFactory"/>

静态工厂只是多了一个factory-method属性,指定创建对象的方法就行了。
实例工厂就需要首先把工厂对象注入到bean里面,然后比静态工厂多一个factory-bean的属性就ok了。

加载spring的方式

     //创建容器对象  创建完以后会把spring里面所有的对象都初始化 但以前的BeanFactory(早年用的)只会在使用对象的时候才会创建对象
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//从相对路径下加载
           //向容器要girl对象
    Girl user = (Girl) ac.getBean("girl");

第一句代码是spring加载配置文件,其实applicationcontext在加载的时候已经把配置文件里所有的bean对象都生成了,就算我们不去去girl对象,他也已经有值了。

对象的属性注入

对于对象他的属性怎么赋值呢?这里是4种方式,常见的是两种

  • set方法注入
  • 构造函数注入
  • p命名空间注入
  • spel注入

    <!--set方法注入-->
    <bean class="org.thingkingWalker.spring.bean.Girl" name="girl">
    <property name="age" value="18"/>
    <property name="car" ref="car"/>
    </bean>
    
    <bean class="org.thingkingWalker.spring.bean.Car" name="car">
    <property name="name" value="benz"/>
    </bean>
    
    
    
    <!--构造函数注入-->
    <bean name="car" class="org.thingkingWalker.spring.bean.Car">
    <constructor-arg name="name" value="BMW"/>
    </bean>
    <!--0表示参数在构造函数的位置  type表示参数对应的类型-->
    <bean name="Girl" class="org.thingkingWalker.spring.bean.Girl">
    <constructor-arg name="car" ref="car" index="0" type="org.thingkingWalker.spring.bean.Car"/>
    </bean>
    
     <!--p名称空间注入-->
    <bean name="girl" class="org.thingkingWalker.spring.bean.Girl" p:age="28" p:height="181" p:car-ref="car"/>
    
    <!--spel注入 spring  expression Language -->
    <bean name="girl2" class="org.thingkingWalker.spring.bean.Girl" >
    <property name="age" value="#{girl.age}"/>
    <property name="car" ref="car"/>
    


    可以看到基本类型直接用value就可以赋值了,但如果是对象属性,用ref这个字段就ok。

复杂对象的赋值

复杂对象指的是集合、数组、配置等类型的数据。

public class ComplexBean {
private Object[] object;
private List list;
private Map map;
private Properties properties;

public Object[] getObject() {
    return object;
}

public void setArr(Object[] object) {
    this.object= object;
}

public List getList() {
    return list;
}

public void setList(List list) {
    this.list = list;
}

public Map getMap() {
    return map;
}

public void setMap(Map map) {
    this.map = map;
}

public Properties getProperties() {
    return properties;
}

public void setProperties(Properties properties) {
    this.properties = properties;
}
}

上面一个五种数据类型我们分别看一下,有一点原则是,其实也可以按照我们上面的方式写,就是当他的数量是1的时候其实就是一个普通的数据类型。

 <!--array注入-->
<bean name="arr" class="org.thingkingWalker.spring.bean.CollectionBean">
    <!--如果数组中只有一个值,直接使用value即可-->
    <!--<property name="arr" value="first"/> -->
    <property name="arr">
        <array>
            <value>1</value>
            <value>2</value>
            <value>3</value>
            <ref bean="girl2"/>
        </array>
    </property>
</bean>

<!--list注入-->
<bean name="list" class="org.thingkingWalker.spring.bean.CollectionBean">
    <!--如果数组中只有一个值,直接使用value即可-->
    <!--<property name="arr" value="first"/> -->
    <property name="list">
        <list>
            <value>q</value>
            <value>w</value>
            <value>d</value>
            <ref bean="girl"/>
        </list>
    </property>
</bean>

<!--map注入-->
<bean name="map" class="org.thingkingWalker.spring.bean.CollectionBean">
    <!--如果数组中只有一个值,直接使用value即可-->
    <!--<property name="arr" value="first"/> -->
    <property name="map">
        <map>
            <entry key="123" value="23423423"/>
            <entry key="432423" value="gfad"/>
        </map>
    </property>
</bean>

<!--map注入-->
<bean name="prop" class="org.thingkingWalker.spring.bean.CollectionBean">
    <!--如果数组中只有一个值,直接使用value即可-->
    <!--<property name="arr" value="first"/> -->
    <property name="properties">
        <props>
            <prop key="123">faadfda</prop>
            <prop key="432423">1gvfad</prop>
        </props>
    </property>
</bean>

学习资料有参考黑马的培训视频,初学者我觉得视频还是一个不错的学习资料。不急不躁,每天都在积累进步,这个很不得了,大家一起共勉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值