spring是一种容器管理框架。

| 版本问题

一定要注意每个依赖(jar)的版本。

看评论之后,再运行相关代码。

| IoC(控制反转)/DI依赖注入

Spring 中的所管理的东西都被称为组件。

| 当组件被Spring管理之后,该如何实现注入?有几种方法?

一共三种方法;

1.通过构造方法。

2.通过set方法。

3.通过接口注入。

小结;

首先spring指的是一种容器管理框架,其中的核心概念之一是IOC(控制反转)/DI(依赖注入),该概念需要从依赖注入着手理解,首先是注入两个字,那么首先要解决的问题便是啥是注入?简单理解就是机器a要运行,内部要用到机器b,那么把机器b放到机器a的过程便是注入。紧着的问题便是在哪注入?还是上述例子,就是机器a中声明(这个机器a便是java项目中的类),那么问题就又来了注入是个动词,那么它的宾语什么呢?可以看出它的宾语是 依赖。什么又是依赖呢?上述例子中的机器b便是 依赖,显而易见依赖其实对应的也是java中的类。

那么我们要学的重点便都在这个动词上了。怎么注入呢用 spring?

在注入之前我们要配置spring的aplication.xml文件。

其中的最重要的一个标签。便是组件标签<bean> ,我们需要用此标签来注册组件。写法如下;

其中是有三种解决方法;

   1.构造器注入;

       首先被注入的类中要声明的有依赖类型的属性。

       其次要创建有参的构造器,该构造器中的参数需要是依赖类型数据。

java类中;
----------------------------------------
    private GoodDao  goodDao;
 
    public GoodService(GoodDao goodDao){
        this.goodDao=gooDao;
    }
 

----------------------------------------
 
aplication.xml文件;
-------------------------------------
    //id 其实是类名,但是首字母要小写。    //要被注册为组件的全类名。
    <bean id="goodDao" class="com.oracle.dao.GoodDao" >
    
    </bean>
 
 
    <bean id="goodService" class="com.oracle.srevice.GoodService">
        <Constructor name="goodDao" ref="goodDao">
        </Constructor>
    </bean>
 

    2.set方法注入;
    首先要声明一个依赖类型的属性,
    次之对其创建一个get和set方法(其实只需要set方法即可)。
 
java类中;
----------------------------------------
    private GoodDao  goodDao;
 
    public void setGoodDao(GoodDao goodDao){
        this.goodDao;
    }
    public GoodDao getGoodDao(){
        return goodDao;
    }
    
 

----------------------------------------
 
 
aplicationContext.xml文件;
-------------------------------------
    //id 其实是类名,但是首字母要小写。    //要被注册为组件的全类名。
    <bean id="goodDao" ref="com.oracle.dao.GoodDao" >
    
    </bean>
 
    <bean id="goodService" ref="com.oracle.srevice.GoodService"
        <property name="goodDao" ref="goodDao"></property>
    </bean>
 

    3.接口注入;
 
  
| 用Spring生成对象
 
//启动Spring容器,在Spring容器启动时会通过配置文件注册信息
 
    ApplicationContext context  =  new ClassPathXmlApplicationContext("applicationContext.xml");
 

//获取被管理的的组建的实例对象
 
    context.getBean(GoodService.class);                    //两种方式:   1. 通过数据类型的字节码文件反射获取,2.通过指定的名称获取。
----------------------------------

注入方式常用的是set注入

java中的接口是可以多实现的,添加一个接口,可以对一个接口提供不同实现。

Spring容器;

Spring托管组件时会创建一个容器进行装载 每个bean。

spring在注册时,是通过类型和名称两种方式注册的,上述两种方式都能找得到对应的组件。

@service  ----业务层注解

@Repository  ------持久层

@Autowired  ---- 自动注入 默认按照类型

---不需要在设置set方法

@Qualifier(value="gd")

       --- 通过名称的方式注入(在依赖的注释赋值上名称)

@Resource  --默认按照名称做注入

写法  -- @Resouce(name="goodDao")

通过反射获取实体类

@Primary 主要注入  (在多个接口实现类,以防止出现冲突,不用根据名称,根据类型就可以找到对应的实体类)

知识小结

下午主要学习了spring框架是如何使用 注解 的方式实现 依赖注入 的。上午我们已经学习了如何用xml文件配置依赖的注入。 那么如果使用注解的话,我们该如何配置呢?首先我们要知道注解是什么?注解也是一种配置方式,通常是在要被注解的类或者其他类型的上一行。 首先第一个dao层的注解之一,  @Repository   声明此dao类是可以被注入的(默认以数据类型的方式注入),然后是service层的注解 @service ,声明此service类是要被注入依赖的类,然后在该类中要被注入依赖的接受属性上方添加 @Autowired 注解,其用意是指用来接收要被注入依赖的。  然后就可以通过调用ApplicatonContext对象的getBean方法获取对象(通过上方的注解配置后,都是以数据类型的方式来实例话对象的)。如果想要通过名称来找的话,只需要把要被实例化的类名首字母小写,其它不变,以字符串的形式填入getBean的参数中即可达到上述效果。      

如果要自定义名称的话,有以下思路,首先通过名称找到service层的类,那么就需要修改service注解为 @service("service名") 。即可通过该名称进行实例化数据。然后通过名称注入依赖的话,可以在 @Autowired 的注解之下添加一个 @Qualifier(value =“依赖类名首字母小写”) ,如果写的是其他名称的话,同样要修改dao层依赖上方的注解@Repository为 @Repository("不是默认类名") 。然后还有一点要说的是,在要接收依赖的属性的注解还可以用 @Resource(name="非默认名称") ,此注解默认通过名称进行依赖注入。

最后,就是要说的是通过接口注入了,首先接收依赖的数据类型是对应的接口类型,那么要对指定的依赖进行注入的话,需要修改接收依赖的属性之上添加@Autowired和 @Qualifier(value =“指定要注入的默认类名”),还可以通过在要被注入的依赖上方添上@Primary

@Controller 控制层注解

当不能区分领域是使用下面的注解

@Component  公用的