spring的IOC(控制反转),依赖注入

  1. 各种数据类型的注入
    1. <?xml version="1.0" encoding="UTF-8"?>
      <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"
          xmlns:aop="http://www.springframework.org/schema/aop"
          xmlns:tx="http://www.springframework.org/schema/tx"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.2.xsd">
      	
      	<!-- set方法注入(1.必须要有无参的构造方法,2.必须要有set方法 -->
      	<bean id="s1" class="com.pojo.Student">
      		<property name="stuName" value="陈帅"></property>
      		<property name="age" value="16"></property>
      	</bean>
      	
      	<!-- 构造方法注入(必须要有带参的构造方法) -->
      		<!-- type是根据参数类型匹配方法  -->
      	<bean id="s2" class="com.pojo.Student">
      		<constructor-arg value="张三" type="java.lang.String"></constructor-arg>
      		<constructor-arg value="98" type="double"></constructor-arg>
      	</bean>
      		<!-- index可以调整参数的顺序 -->
      	<bean id="s3" class="com.pojo.Student">
      		<constructor-arg value="张三" index="0"></constructor-arg>
      		<constructor-arg value="98" index="2"></constructor-arg>
      		<constructor-arg value="18" index="1"></constructor-arg>
      	</bean>
      		<!-- 如果value值中含有一些特殊符号可以使用 <![CDATA[符号]]>,但是value必须写成一个标签元素 -->
      	<bean id="p1" class="com.pojo.Person">
      		<constructor-arg>
      			<value><![CDATA[张三说&]]>  </value>
      		</constructor-arg>
      		<constructor-arg value="三天不打,上房揭瓦" ></constructor-arg>
      	</bean>
      	
      	<!-- 使用p命名空间进行属性注入(必须导入头文件xmlns:p="http://www.springframework.org/schema/p") -->
      	<bean id="s4" class="com.pojo.Student" p:stuName="张三" p:age="18" p:score="100"></bean>
      	
      	<!-- 使用内部bean实现对象类型属性注入 -->
      	<bean id="s5" class="com.pojo.Student">
      		<property name="stuName" value="陈帅"></property>
      		<property name="age" value="16"></property>
      		<property name="car">
      			<bean class="com.pojo.Car"  p:brand="audi" p:price="300000" p:speed="260" p:safe="good"></bean>
      		</property>
      	</bean>
      	
      	<!-- 引用外部的bean实现对象类型属性注入 ,用ref="外部bean的id名"-->
      	<bean id="c1" class="com.pojo.Car" p:brand="BMW" p:price="400000" p:speed="260" p:safe="good"></bean>
      	
      	<bean id="s6" class="com.pojo.Student">
      		<property name="stuName" value="陈帅"></property>
      		<property name="age" value="16"></property>
      		<property name="car" ref="c1"></property>
      	</bean>
      	
      	<!-- 为级联属性赋值,注意:先要引用一个bean -->
      	<bean id="c2" class="com.pojo.Car"></bean>
      	
      	<bean id="s7" class="com.pojo.Student">
      		<property name="stuName" value="lisi"></property>
      		<property name="age" value="20"></property>
      		<!-- 先引用外部的car对象 -->
      		<property name="car" ref="c2"></property>
      		<!-- 在修改car的属性值 -->
      		<property name="car.brand" value="benc"></property>
      	</bean>
      	
      	<!-- 注入list集合类型的属性(数组也是用list) -->
      	<bean id="s8" class="com.pojo.Student" >
      		<property name="phones">
      			<list>
      				<value>iphone</value>
      				<value>huawei</value>
      			</list>
      		</property>
      	</bean>
      	
      	<!-- 注入set集合类型的属性 -->
      	<bean id="s9" class="com.pojo.Student">
      		<property name="clos">
      			<set>
      				<value>blue</value>
      				<value>yellow</value>
      				<value>red</value>
      			</set>
      		</property>
      	</bean>
      	
      	<!-- 注入map集合类型的属性 -->
      	<bean id="s10" class="com.pojo.Student">
      		<property name="map">
      			<map>
      				<entry key="a1" value="123"></entry>
      				<entry key="a2" value="456"></entry>
      				<entry key="a3" value="789"></entry>
      			</map>
      		</property>
      	</bean>
      	
      	<!-- 注入properties类型的属性 -->
      	<bean id="dataSource" class="com.pojo.DataSource">
      		<property name="properties">
      			<props>
      				<prop key="driver">com.mysql.jdbc.Driver</prop>
      				<prop key="url">jdbc:mysql://localhost:3306/</prop>
      				<prop key="username">root</prop>
      				<prop key="password">123</prop>
      			</props>
      		</property>
      	</bean>
      	
      </beans>

       

  2. 使用注解方式进行IOC的配置,
    1. @Component()

      通用型

      @Repository()用于标注持久层(dao层)
      @Service()用于标注业务类(service层)
      @Controller()用于标注控制器类(controller层)
      @Autowired根据类型自动装配,如果被装配的类型不是唯一的就要加@Qualifier("被装配的注解的名称")
      @Resource(name="被装配的注解的名称")是根据名称去装配
       
    2. package com.service;
      
      import javax.annotation.Resource;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.stereotype.Service;
      
      import com.dao.UserDao;
      
      //service表示service层
      //如果@Service()什么都不写,那就用使用该类的名称的首字母小写调用
      @Service("userService")
      public class UserServiceImple implements UserService {
      	
      	//@Autowired是根据类型装配()
      	@Autowired  
      	@Qualifier(value="userDao2")//这里也是名称
       	UserDao userDao;
      	
      	//这里的@Resource(name="userdao2")是根据名字去装配,如果这里不写,就是根据下面定义的dao这个名字去匹配
      	@Autowired
      	@Resource(name="userDao2")
      	UserDao dao;
      	
      	
      	@Override
      	public int save() {
      			
      		return userDao.save();
      	}
      
      	
      
      }
      
       
    3. 使用IOC进行注入:
             前提:先在applicationContext.xml文件中配置自动扫描:
          <context:component-scan base-package="com.pojo,com.service,com.dao">  
        
           在需要配置的类上面:
            @Component("stu") 
                   表示注入一个组件,效果等同于在配置文件中加:
                      <bean id="stu" Class="com.pojo.Student">
                      </bean>
            此时,就可以直接在测试类中通过getBean("stu")来获取当前对象。
            
            用于表现层       用于业务层        用于持久化层
         @Controller        @Service      @Repository
           共性:都是@Componment的衍生注解,只是使用语义化的注解使得注入时更加的明确
           
           最终要实现的效果:在各个层之间可以直接去调用和访问bean。
          
          @AutoWired
         作用:自动按照类型注入,只要容器中有唯一的类型匹配,则可以注入成功。如果没有匹配的类型,就会报错。
           
           如何当前类型在容器中不唯一,如何保证注入成功???
             @AutoWired
           @Qualifier(value=””)进行配置,此时value可以配置当前对象的名称,从而实现按照名称来注入。
           
           
           或者是:
           直接使用:
             @Resource
          作用:直接按照bean的id进行注入
          属性:name,用于指定bean的id

            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值