【Spring】spring入门小结

目录

前言

一、spring是什么?

二、spring的体系结构

三 spring配置文件

1.Bean文件的基本配置

2.spring创建对象的三种基本方式

三 Bean的依赖注入

依赖注入的两种实现方式:

Bean依赖注入的数据类型



前言

        这几天学习了spring,学习过程中感觉特别的模糊,是时候开始总结整理一下了.从第一天的学习基础开始整理.学习了,spring的优势,spring的相关API,spring的体系结构以及spring的一些基本配置等.


一、spring是什么?

        spring以IOC(控制翻转)和AOP(面向切面编程)为核心,提供了表现层(SpringMVC),持久层(Spring JDBC),业务层事务管理等众多的企业级应用技术的full-stack(全栈)轻量级的java开源框架.

       优势:

  • 方便解耦,简化开发:(通过spring的IOC容器,将对象之间的依赖关系交给了spring进行控制,避免了编码过程造成的程序之间的耦合,)
  • AOP编程的支持:(spring提供AOP功能,方便进行面向切面的编程,是许多不容易用传统OOP实现的功能通过AOP轻松实现)
  • 声明式事务的支持:(通过声明式方式灵活的进行事务的管理,提供开发效率和质量)
  • 方便程序的测试:(在spring中,可以使用spring对Junit4的支持,通过注解的方式方便的进行对程序的测试操作)
  • 方便集成各种优秀框架:(spring不仅不排斥各种优秀的开源框架,反而可以降低各种框架的使用难度,提供了对各种框架的使用支持)
  • 降低了JavaEE的API的使用:(spring对很多难用的API提供了一个简单的封装层,通过spring进行简单的封装,使使用难度大大减低.)

二、spring的体系结构

                   

三 spring配置文件

1.Bean文件的基本配置

基本配置:

  • id:唯一标识
  • class:全限定类名

范围配置:

  • singleton:默认值(单例)--->创建出的实例为单例模式,IOC之创建一次,然后一直存在
  • prototype:多例的--->创建出的实例为多例模式,每次获取bean的时候,IOC都给我们重新创建新对象

                   

2.spring创建对象的三种基本方式

1.无参构造方式实例化:

  • 创建UserDaoImpl
package com.james.dao.impl;
import com.james.dao.UserDao;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
/*实现Userdao接口(save()方法)*/
public class UserDaoImpl implements UserDao{
    public UserDaoImpl(){
        System.out.println("调用了无参的构造方法");
    }
    public void save() {
        System.out.println("执行了UserDaoImplements的save方法");
    }
}
  • 创建UserServiceImpl
package com.james.service.impl;
import com.james.dao.UserDao;
public class UserServiceImpl implements com.itheima.service.UserService {
    public void save() {
    }
}
  • 创建测试类
package com.james;
import com.james.dao.UserDao;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
    @Test
    public void save(){
        //从spring的IOC中获取userDao对象
        ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao=(UserDao)app.getBean("userDao");
        userDao.save();
    }
}
  • 编写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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"></bean>
</beans>

执行结果:(spring容器已经成功对Bean对象进行了实例化)

:

2.静态工厂方法实例化:(了解 )

    此种方式提供一个静态工厂对对象进行实例化,方法如下:

  • 自定义一个工厂类
package com.james.factory;
import com.james.dao.UserDao;
import com.james.dao.impl.UserDaoImpl;
public class StaticFactory {
    public static UserDao createUserDao(){
        return new UserDaoImpl();
    }
}
  • 配置文件

         

上述代码中:对应的UserDaoImplement实现类指定了其对应的工厂类StaticFactory,而factory-method的属性通知spring容器调用工厂类的createUserDao方法获取UserDaoImpl的实例.

3.工厂普通方法实例化(了解)

  • 自定义工厂类
package com.james.factory;
import com.james.dao.UserDao;
import com.james.dao.impl.UserDaoImpl;
public class NormalFactory {
    public  UserDao createUserDao(){
        return new UserDaoImpl();
    }
}
  • 配置文件

                       

上述代码中:首先配置一个实例工厂Bean,然后配置需要实例化的Bean,在id为userDao的Bean中,使用factory-bean属性指定一个实例工厂,该属性值对应实例工厂的id属性值,使用factory-method属性确定使用工厂的的createBean方法.

三 Bean的依赖注入

        依赖注入是Spring框架中一种解耦的策略,称为DI或IOC(控制反转),主要有set方式和constractor(构造方法)方式,使得类与类之间以配置文件的形式组织在一起.

        例如classA 中用到了classB如果写代码的话是new 一个classB,而用依赖注入的方式则是在applicationContext.xml里面写两个

<bean id="id1" class="A"><property name="B" ref="id2"></bean>
<bean id="id2" class="B"></bean>

就是在类A里原来需要new 的地方就不需要写了,

依赖注入的两种实现方式:

构造方法:

set方法:

Bean依赖注入的数据类型

1)普通数据类型

2)引用数据类型

前两种已经在依赖注入的构造方法和set方法两种方式中体现出来.

3)集合数据类型(数组类型,list集合,set集合,双列集合)

package com.james.Service.impl;
import lombok.Data;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Data
public class UserService {
    private String[] hobbies;
    private List<Object> games;
    private Set<Object> names;
    private Map<String, Object> map;
    private Properties prop;

    public void setProp(Properties prop) {
        this.prop = prop;
    }
    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }
    public void setGames(List<Object> games) {
        this.games = games;
    }
    public void setNames(Set<Object> names) {
        this.names = names;
    }
    public void setMap(Map<String, Object> map) {
        this.map = map;
    }
}

配置文件:

<?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">
    <beans>
        <bean id="userService" class="com.itheima.Service.impl.UserServiceImpl">
            <!--bean类型的依赖注入之数组类型-->
            <property name="games">
                <list>
                    <value>LOL</value>
                    <value>王者荣耀</value>
                </list>
            </property>
            <!--bean类型的依赖注入值list类型-->
            <property name="hobbies">
                <array>
                    <value>抽烟</value>
                    <value>喝酒</value>
                    <value>烫头</value>
                </array>
            </property>
            <!--bean类型的依赖注入之set类型-->
            <property name="names">
                <set>
                    <value>James</value>
                    <value>Danny</value>
                </set>
            </property>
            <!--bean类型的依赖注入之map类型-->
            <property name="map">
                <map>
                    <entry key="one" value="破鞋"/>
                    <entry key="two" value="一匹马"/>
                </map>
            </property>

            <property name="prop">
                <props>
                    <prop key="a">A</prop>
                    <prop key="b">B</prop>
                </props>
            </property>
        </bean>
    </beans>

</beans>

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/109158834