DI注入

1.什么是DI
Dependence Injection 依赖注入(DI是IOC的一种具体实现):解决主键之间的装配问题
2.Spring中(DI)依赖注入的实现方式
 2.1 setter 注入
基于set 方法的注入--
<bean id="cardb" class="com.xdl.demo.Card" >
<property name="suits" value="红桃"></property><!-- name:属性名,value:为属性赋值 -->
<property name="point" value="K"></property>
</bean>
property:属性,name:属性名,value:为属性赋值  ref:引用
<property name="card" ref="card"></property></bean>
 2.2 构造器注入
    基于构造方法的注入
    <bean id="player" class="com.xdl.demo.Player">
<constructor-arg index="0" value="小马哥"></constructor-arg> <!-- 形参,index下标 -->
<constructor-arg index="1" value="18"></constructor-arg>
<constructor-arg index="2" ref="cardc"></constructor-arg><!-- ref:对象 -->
</bean>
 2.3 自动化注入
  在bean标记中 使用autowite 属性进行指定 取只有
  byName 按照Spring 容器中组件的id 进行自动查找 看是否和属性名相同
  byType 根据属性的类型 在容器
  constructor 类似于byType 但类型冲突时会启用byName(看的是形参名)
3. bean 基本参数注入
   3.1字符串 整数 浮点数
   <bean id="card" class="com.xdl.demo.Card">
<property name="suits">
<value>黑桃</value>
</property>
<property name="point"  ><null/></property>
</bean>
练习:
在Spring容器中创建一个连接池对象 通过Spring 容器获取连接池对象
然后通过连接池对象 获取数据库连接
 3.2 成员
 
 3.3 注入集合
  <list/>(List)、<set/>(Set)、<map/>(Map)、<props/>(Properties)
 
 eg:
  <bean id="msgBean" class="com.xdl.bean.MagBean">
<property name="title" value="回家的愿望"></property>
<property name="length" value="1001"></property>
<property name="friends">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>尼玛</value>
</list><!-- 自动将list值给friends -->
</property>
</bean>


<property name="phones">
<map>
<entry key="18121191101" value="小李"></entry>
<entry key="18121111111" value="小张"></entry>
<entry key="18121191103" value="小卫"></entry>
<entry key="18121191104" value="小丽"></entry>
</map>
</property>
<property name="phones2">
<props>
<prop key="15811999988" >张飞</prop>
<prop key="15811999987" >白起</prop>
<prop key="15811999986" >韩信</prop>
<prop key="15811999985" >李靖</prop>
<prop key="15811999984" >粟裕</prop>
</props>
</property>
如果另一个对象也用到相同的这个集合,则需要单独定义,用到
<util:list(set/map/properties) >

</util>

5.Spring 的EL表达式
把原来EL表达式中的$变成# 取得式=是Spring容器中对象的值


6.组件扫描
  Spring提供了一套 可以把组件在容器中创建出来 以及组装组建的标注(注解)
  这种技术可以大大简化xml的配置
6.2 组件扫描的使用步骤
1.建立工程拷贝配置文件spring 容器对应的配置文件和导入jar包(IOC和AOP)
2.在Spring容器中对用的配置文件中开启组件扫描
<context:component-scan   base-package="包" />
3.在建立java类时 需要在java类上打对应的标注
@Repository 持久化层组件注解(DAO层)
@Service    业务层组件注解(调用DAO)
@Controller 控制层组件注解(sevlet)
@Component  通用层注解(除以上3中其他组件注解)
4.创建Spring 容器 从容器中获取对应的组件

1.EL表达式作用

2.JSP selvlet 4大对象?

1)servlet的四大作用域对象:

page(pageContext)  :当前jsp页面

request(HttpServletRequest)

session(HttpSession):

application(ServletContext):tomcat启动时创建,tomcat关闭时销毁,整个web的生命周期只有一个

括号内为其对应的类

2)

jsp的九大内置对象:pageContext(pageContext)、request(HttpServletRequest)、session(HttpSession)、application(ServletContext)、response(HttpResponse)、config(ServletConfig)、out(JspWriter)、page(Object)、exception(Throwable)

括号内为其对应的类,这些对象都是存在于jsp中的,可以直接使用

jsp的四大作用域对象:

pageContext(pageContext)、request(HttpServletRequest)、session(HttpSession)、application(ServletContext)

括号内为其对应的类


控制反转(IoC)和依赖注入DI)是面向对象编程(OOP)中常见的设计模式,它们可以帮助我们更好地组织和管理代码。下面是一个简单的实验来演示IoC和DI。 假设我们有一个简单的类 `Car`: ```java public class Car { private String name; public Car(String name) { this.name = name; } public void start() { System.out.println("Starting " + name); } } ``` 这个类有一个构造函数和一个启动方法。 现在我们想要在另一个类中使用 `Car` 类,但我们不想直接在这个类中创建 `Car` 对象。这就是IoC的思想,我们将控制权交给外部,由外部来创建和管理 `Car` 对象。 首先,我们定义一个接口 `CarFactory`: ```java public interface CarFactory { Car createCar(String name); } ``` 这个接口有一个方法 `createCar`,用于创建 `Car` 对象。 然后,我们实现一个具体的 `CarFactory` 类: ```java public class SimpleCarFactory implements CarFactory { public Car createCar(String name) { return new Car(name); } } ``` 这个类实现了 `CarFactory` 接口,并实现了 `createCar` 方法来创建 `Car` 对象。 现在,我们可以在另一个类中使用 `CarFactory` 来创建 `Car` 对象,而不是直接创建它们: ```java public class CarStarter { private CarFactory carFactory; public CarStarter(CarFactory carFactory) { this.carFactory = carFactory; } public void startCar(String name) { Car car = carFactory.createCar(name); car.start(); } } ``` 这个类有一个构造函数,它接受一个 `CarFactory` 对象,并使用它来创建 `Car` 对象。这就是DI的思想,我们将依赖关系注入到类中,而不是在类内部创建它们。 现在,我们可以在主函数中使用 `CarStarter` 类来启动 `Car` 对象: ```java public static void main(String[] args) { CarFactory carFactory = new SimpleCarFactory(); CarStarter carStarter = new CarStarter(carFactory); carStarter.startCar("BMW"); } ``` 这个程序将创建一个 `SimpleCarFactory` 对象,并将它传递给 `CarStarter` 对象的构造函数。然后,它将调用 `startCar` 方法来启动一个名为 "BMW" 的 `Car` 对象。 这就是一个简单的IoC和DI的实验。通过使用这些设计模式,我们可以更好地组织和管理代码,并使代码更容易测试和维护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值