Spring(二):di的实现语法

1.di是什么?

DI(Dependency Injection):依赖注入, 只需要在程序中提供要使用的对象名称就可以, 至于对象如何在容器中创建,赋值,查找都由容器内部实现。
spring是使用的di实现了ioc的功能, spring底层创建对象,使用的是反射机制。

2.di的实现语法

2.1 基于xml的di实现

2.1.1set注入

set注入(设置注入):spring调用类的set方法,可以在set方法中完程属性的赋值

<bean id="对象的名称" class="类所在的全限定名称">
       <property name="属性1" value="值"/>
       <property name="属性2" value="值"/>
   </bean>

2.1.2 构造注入

spring调用类参数构造方法,在创建对象的同时,在构造方法中给属性赋值。构造注入使用,一个表示构造方法一个参数。
标签属性: name:表示构造方法的形参名,index:表示构造方法的参数位置,参数从左往右位置是0,1,2,value:构造方法形参类型是简单类型的,使用value,引用类型的是ref

2.1.3 byName和byType

1、byName:java类中引用类型的属性名和spring容器中的的id一样,且数据·类型一致的

2、byType:java类中引用类型的数据类型和spring容器中的class属性是同源关系的,这样的bean能够赋值给引用类型
3、autowire默认是byType
同源:

  • java类中引用类型的数据类型和bean中class值是一样的
  • java类中引用类型的数据类型和bean的class的值是父子类关系
  • java类中引用类型的数据类型和bean中的class值接口和实现类的关系

2.2 基于注解的di实现

2.2.1 使用注解的步骤

1、加入依赖
2、创建类,在类中加入注解
3、创建spring的配置文件
声明组件扫描器的标签,指定注解在你的项目中的位置。

 <context:component-scan base-package="类的路径"/>
 <context:property-placeholder location="classpath:属性文件名.properties"/>

4、使用注解创建对象,创建容器

2.2.2 对于类的注解

compoment这个注解是用来创建对象的,等同于bean的功能, 这个注解有一个属性,是value 就是对象的名称 也就是bean的id值,value的值是唯一的,创建的对象在整个spring中只有一个,位置是在类的上面,表示创建student对象名字是mystudent,等同于bean的功能,spring中和@component功能一致,创建对象的注释还有:
1、@Repository(用在持久层上面):放在dao的实现类上面,表示创建dao对象,dao对象只能访问数据库
2、@service(用在业务层上面的):是做业务处理的,可以有事务功能的。
3、@controller(放在控制器上面):放在控制器类的上面,创建控制器对象的。控制器对象,能够接受用户提交的参数,显示请求的处理结果
以上三个注解的使用语法和component用法是一样的,但是这三个注解还有额外的功能。
这三个注解是为了给项目的对象分层的。 这些功能不是一模一样的,这三个注解有额外的功能。角色声明。

2.2.3 对于属性的赋值

在属性上加入 @Value(“属性值”)
对于引用类型可以加上 @Autowired, 默认是byType如果想要使用byName,需要做的是:

  • 1、在属性上面加入@Autowired,属性required,是一个boolean类型, 默认是true,如果是true,表示引用类型赋值失败,程序报错,并终止执行
  • 2、required=false:引用类型如果赋值失败,程序正常执行,引用类型是null
  • 3、在属性上面加入@Qualifier(value=“bean的id”):表示使用指定的bean完成赋值
    @Resource注解:默认使用byName,失败以后在使用byType

猜你喜欢

转载自blog.csdn.net/qq_41984117/article/details/109469419