Springday01

什么是Spring?

Spring 是分层的Java SE/EE应用轻量级开源框架,以IoC(Inversion of Control控制反转,目的是解耦)和AOP(面向切面编程,本质是动态代理,目的是增强)为内核

Spring的优势:

1、方便解耦,简化开发(IoC思想)

2、AOP编程的支持

3、声明式事务的支持,在xml里面配置事务,在方法上或者类上 打一个注解即可

4、方便程序的测试

5、方便集成各种优秀框架

6、降低JavaEE API的使用难度

7、Java源码是经典学习范例

耦合和内聚:

耦和:代码书写过程中所使用的的技术结合紧密度,用户衡量软件中各个模块的互联程度。

内聚:代码书写过程中单个模块内部各组成部分间的联系,用于衡量软件中各模块内部的功能联系

程序书写的目标:高内聚,低耦合

就是同一个模块中各个元素要高度紧密,但是各个模块间的相互依存度不要那么紧密

控制反转IOC:

  • 什么是IOC inversion of control

控制反转,把对象的创建工作交给框架(工厂 Spring),我们不需要自己去new这个对象,只管问工厂要。由原来的主动创建对象,变成自己被动接收 框架创建的对象。

  • IOC的作用

IOC是Spring的核心之一,作用就是为了解耦,降低程序,代码间的耦合度。

基础入门:

1、添加依赖:

<!--        添加spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>
<!--        添加junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、创建UserService接口

public interface UserService {
    /**
     * 添加方法
     */
    void add();
}

3、创建UserService的实现类

public class UserServiceImpl implements UserService {
    @Override
    public void add() {
    }
}

4、在resource下创建applicationContext.xml文件(new->xml configurer-->spring config),创建spring的控制资源

<?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">
<!--创建spring控制的资源-->
    <bean id="us" class="com.itheima.service.impl.UserServiceImpl"/>
</beans>

5、在test文件夹下创建测试类

//创建工厂
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//问工厂要对象
        UserService us2 = (UserService)context.getBean("us");
//调用对象方法
        us2.add();
    }

<bean>标签:用于配置,把对象交给spring进行控制,spring会帮助我们创建对象。

注意:spring是调用类的无参构造的创建对象,如果没有无参构造方法,对象不能创建成功。

基本属性:

1、id:唯一表示,不可重复,没有设置id值的情况下,默认以首字母小写的类名作为id值

2、class:bean的权限类名,要写全路径

3、scope:用来定义对象的使用范围,更多的时候是用来定义是单例还是多例对象。

3.1、singleton:表示单例的,一个spring容器里只有一个该bean对象

3.2、prototype:表示多例,一个spring容器里拥有多个该bean对象,每次调用对象都是一个新的对象

  • init-method:指定类中初始化方法名称,该方法将在bean对象被创建时执行
    • singleton:

1、方法只会调用一次,而且是在创建工厂的时候就调用了;

2、同时也表明了如果托管的类时单列的配置,那么这个类的对象,会在创建工厂的时候,就顺便创建了。

prototype:

1、方法会调用多次,问工厂要多少次对象,就会调用多少次;

2、托管的类时多列配置,那么这个类的对象,会在问工厂要对象的时候才会创建

  • destroy-method:指定类中销毁方法名称,该方法将在bean对象被销毁时执行

singleton:

1、如果关闭了工厂,调用close方法,那么工厂关闭时,就会把单列对象也销毁了,顺便调用了destroy方法。

prototype:

2、如果关闭了工厂,那么destroy方法不会调用,因为多例对象不由工厂来管理他们的状态

DI:依赖注入:

应用程序运行依赖的资源有spring为其提供,资源进入应用程序的方式称为注入

三种常见的注入方式:

1、set方法注入:

<property>标签:

作用:使用set方法的形式为bean提供标签

name:对应bean中的属性值,

value:设定非应用类型的对应的值,不能与ref同时使用

ref:设定应用类型对应的值,不能与value同时使用

代码:

1、创建dao接口

public interface UserDao {
    void add();
}

2、创建dao的实现类

public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
        System.out.println("调用了userdaoimpl的add方法");
    }
}

3、创建service接口

public interface UserService {

    void add();
}

4、创建service的实现类

    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao=userDao;
        System.out.println("调用了set方法注入值");
    }

    public void add() {
        System.out.println("调用了UserServiceImpl。。。。。方法");
        userDao.add();
    }
}

5、创建spring的核心配置文件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">
    <!--把UserService交给spring管理-->
    <bean id="us" class="com.itheima.service.impl.UserServiceImpl">
<!--        通过property对userDao进行赋值-->
        <property name="userDao" ref="userDao"></property>
    </bean>
    <!--把UserDao交给spring管理-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>

6、编写测试方法

@Test
    public void TestAdd(){
    System.out.println("来调用测试方法了----");
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    UserService us =(UserService) context.getBean("us");

    us.add();
}

7、打印结果

来调用测试方法了----
调用了set方法注入值
调用了UserServiceImpl。。。。。方法
调用了userdaoimpl的add方法

流程:ioc容器里面已经有了UserDaoImpl的对象,目前UserServiceImpl需要这个对象

那么:1、现在UserServiceImpl里定义一个USerDao类型的属性,

2、提供这个属性的set方法

3、需要xml里面托管UserServiceImpl类的时候,向spring表明,要给我的类里面的UserDao赋值

2、构造器注入

<constructor-arg/>标签:

作用:构造方法专用的为bean赋值的标签,name,value,ref使用方法与property一致

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

    <bean id="us" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
private  UserDao userDao;
public  UserServiceImpl(UserDao userDao){
    this.userDao = userDao;
}

3、p名称注入

1) 介绍

p名称空间注入,本质仍然是set方法注入

在xml中引入p名称空间的约束

然后通过p:属性名称=""来注入简单数据、使用p:属性名称-ref=""注入其它bean对象,它的本质仍然是set方法注入

<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="" class="" p:属性名="简单值" p:属性名-ref="bean的id"></bean>

</beans>

ApplicationContext的继承体系

  • ApplicationContext:接口,代表应用上下文,可以通过其实例对象获取Spring容器中的bean对象

getbean方法介绍:

getbean():通过id,name,class类型来获取对象,id可和name或者class搭配使用,有id不能单独使用name获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值