Spring课堂小笔记(1)

1、搭建Spring项目
(1).加载依赖

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

(2).在resources中新建配置文件
文件名官方推荐------applicationContext.xml
新建方式:在resources右击->New->XML Configuration File->Spring Config然后会出现在这里插入图片描述
点击Configure application context->create new application context->ok就完成了

2. Spring框架特征实例
(1). 工厂分为静态工厂和非静态工厂
创建对象的实例:

public class PeersonFactory {
//创建person的静态方法
    public static Person createPerson(){
    System.out.println("通过静态工厂创建了对象");
        return new Person(123,"小乔","女");
    }
}
public class NoStaticPeersonFactory {
 //创建person的非静态方法
    public Person createPerson(){
      System.out.println("通过非静态工厂创建了对象");
        return new Person(123,"小乔","女");
    }
}
<!--name="person,person2"相当于小名,可以取多个值 但是不能重复
id:不可以重复且不能使用特殊字符
lazy-init表示对象的加载时机(true(使用对象的时候才创建);false(spring框架一启动就加载))-->
<!--方式1.无参构造方法创建对象-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person"
	scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy">
<!--  DI-依赖注入(给对象赋值)-->
 <property name="id" value="975"></property>
    <property name="name" value="貂蝉"></property>
    <property name="sex" value="女"></property>
 </bean>
 <!--scope="prototype":表示创建对象的规则变成多例-->
 <bean id="p2" name="person3,person4" class="com.swjd.bean.Person" scope="prototype">
<!--  DI-依赖注入(给对象赋值)-->
<property name="id" value="857"></property>
    <property name="name" value="虞姬"></property>
    <property name="sex" value="女"></property>
</bean>
<!--方式2.用带参的构造方法创建对象-->
<bean id="p3" class="com.swjd.bean.Person">
 <constructor-arg index="0" type="int" value="9528"></constructor-arg>
    <constructor-arg index="1" type="java.lang.String" value="蔡文姬"></constructor-arg>
    <constructor-arg index="2" type="java.lang.String" value="女"></constructor-arg>
</bean>
<!--方式3.用静态工厂创建对象-->
<bean id="p4" class="com.swjd.beanfactory.PeersonFactory" factory-method="createPerson">
</bean>
<!--方式4.用非静态工厂创建对象-->
<bean id="noStaticFactory" class="com.swjd.beanfactory.NoStaticPeersonFactory" ></bean>
<bean id="p5" factory-bean="noStaticFactory" factory-method="createPerson">
</bean>

(2).IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架。(对象从容器里拿出来而不是通过new出来)

(3).DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件
Spring的五种注入方式:

1. 调用set方法注入
2. 通过带参的构造方法
3. P命名空间注入(本质还是set注入,语法更简洁)
4. SPEL表达式注入
5. 复杂类型的注入:1)注入对象
                  2)注入数组
                  3)注入集合
                  4)注入Map实例

(4).先创建一个Dog类、Student类和Man类
以下为applicationContext.xml配置文件里的内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

 <!--创建对象-->
 <bean id="d1" class="com.swjd.bean.Dog">
 	<property name="id" value="1"></property>
        <property name="name" value="genki"></property>
        <property name="sex" value="公"></property>
 </bean>
 <!--第一种:set注入-->
 <bean id="m1" class="com.swjd.bean.Man">	 
 	<property name="id" value="1"></property>
        <property name="name" value="管田将晖"></property>
        <property name="age" value="27"></property>
        <!--<property name="dog" ref="d1"></property>-->
        <property name="dog">
            <ref bean="d1"></ref>
        </property>
 </bean>
 <!--第二种:通过带参的构造方法-->
  <bean id="m2" class="com.swjd.bean.Man">
  	<constructor-arg index="0" type="int" value="2"></constructor-arg>
  	<constructor-arg index="1" type="java.lang.String" value="Jerry"></constructor-arg>
        <constructor-arg index="2" type="int" value="21"></constructor-arg>
        <constructor-arg index="3" type="com.swjd.bean.Dog" ref="d1"></constructor-arg>
</bean>
<!--第三种:P命名空间注入-->
bean id="m3" class="com.swjd.bean.Man" p:id="3" p:name="猪八戒" p:age="108" p:dog-ref="d1"></bean>
<!--第四种:SPEL表达式注入-->
<bean id="m4" class="com.swjd.bean.Man">
	<property name="id" value="#{m1.id}"></property>
        <property name="name" value="#{m3.name}"></property>
        <property name="age" value="#{m1.age}"></property>
</bean>
</beans>

以下为第五种复杂类型的注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="s1" class="com.swjd.bean.Student">
 	<property name="name" value="小松菜奈"></property>
	<property name="hobbies">
	  <array>
                <value>拍照</value>
                <value>演戏</value>
                <value>苏打</value>
            </array>
        </property>
        <property name="subject">
            <list>
                <value>Spring</value>
                <value>MyBatis</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="Chinese">
                    <value>95</value>
                </entry>
                <entry key="Math">
                    <value>100</value>
                </entry>
            </map>
        </property>
    </bean>
</beans>

(5).测试

public class MyTest {
	public static void main(String[] args) {
	//1.启动Spring容器
        ClassPathXmlApplicationContext context=
        new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.拿对象
        System.out.println(context.getBean("m1", Man.class));
        System.out.println(context.getBean("m2", Man.class));
        System.out.println(context.getBean("m3", Man.class));
        System.out.println(context.getBean("m4", Man.class));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值