IOC创建对象的方式

无论是否使用,只有在xml文件中被注册(bean),就会被创建。
1.用无参构造创建对象

<!--无参构造创对象
类型 变量名 = new 类型();
Hello hello =new Hello();
id = 变量名
class = new 的对象
property相当于给对象中的属性设值!
-->
<bean id="user" class="com.User.User">
<property name="name" value="陈声铭"/>
</bean>

2.用有参构造创建对象
下标赋值

  <!--第一种下标赋值index是下标,value是具体的值--><bean id="user" class="com.User.User"><constructor-arg index="0" value="陈声铭"/></bean>
</beans>

类型赋值(不建议使用)

<!--类型赋值(不建议使用)-->
<bean id="user" class="com.User.User"><constructor-arg type="java.lang.String" value="陈声铭"
</bean>

参数名赋值

<!--直接通过参数名来赋值-->
<bean id="user" class="com.User.User"><constructor-arg name="name" value="陈声铭"/>
</bean>

spring的配置

起别名

<!--给user起别名叫username-->
<alias name="user" alias="username"/>

导入其他的bean文件

<!--导入其他的bean文件-->
<import resource="bean1.xml"/>
<import resource="bean2.xml"/>
<import resource="bean3.xml"/>

依赖注入

1,依赖注入(set注入)

1,依赖注入(set注入)
依赖:bean对象的创建依赖容器!
注入:bean对象中的所有属性,有容器注入!

环境搭建

1,复杂类型(Address)

package com.injection;public class Address {private String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

2.,真实测试对象

package com.injection;import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;public class Student {private String name;//字符串private Address address;private String[] books;private List<String> hobbys;private Map<String,String> card;private Properties info;//该类主要用于读取Java的配置文件private String wife;private Set<String>game;
}

注入

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><bean id="address" class="com.injection.Address"><property name="address" value="天津大学仁爱学院"/></bean><bean id="student" class="com.injection.Student"><!--普通注入--><property name="name" value="陈声铭"/><!--bean注入--><property name="address" ref="address"/><!--数组注入--><property name="books"><array><value>c++</value><value>java</value><value>spring</value><value>gradle</value></array></property><!--list--><property name="hobbys"><list><value>打代码</value><value>打荣耀战魂</value><value>打DOTA2</value><value>学习Spring</value></list></property><!--map--><property name="card"><map><entry key="农行卡" value="11111111111"/><entry key="饭卡" value="2222222222"/><entry key="建行卡" value="33333333333"/><entry key="身份证" value="44444444444"/></map></property><!--set--><property name="game"><set><value>荣耀战魂</value></set></property><!--wife空值注入--><property name="wife"><null/></property><!--Properties注入--><property name="info"><props><prop key="姓名">陈声铭</prop><prop key="学号">6016203248</prop><prop key="性别">男</prop><prop key="长相">帅</prop></props></property></bean>
</beans>

结果
Student
{
name=‘陈声铭’,
address=Address{address=‘天津大学仁爱学院’},
books=[c++, java, spring, gradle],
hobbys=[打代码, 打荣耀战魂, 打DOTA2, 学习Spring],
card={农行卡=11111111111, 饭卡=2222222222, 建行卡=33333333333, 身份证=44444444444}, info={学号=6016203248, 性别=男, 长相=帅, 姓名=陈声铭},
wife=‘null’
}

p命名空间注入(属性注入,用无参构造器)

<!--p命名空间注入,可以注入简单值,用无参构造器-->
<bean id ="user" class="com.injection.User" p:name="陈声铭" p:age="22"/>

c命名空间注入(构造器注入,用有参构造器)

<!--p命名空间注入,可以注入简单值,用有参构造器-->
<bean id ="user2" class="com.injection.User" c:name="雷志明" c:age="78"/>

测试

import com.injection.Student;
import com.injection.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {public static void main(String[] arsg){ApplicationContext context2 = new ClassPathXmlApplicationContext("Userbean.xml");User user = context2.getBean("user",User.class);System.out.println(user.toString());ApplicationContext context3 = new ClassPathXmlApplicationContext("Userbean.xml");User user2 = context2.getBean("user2",User.class);System.out.println(user2.toString());}
}

结果

注解注入

package com.injection;import org.springframework.stereotype.Component;
//Component等价于<bean id ="user" class="com.injection.User"/>
@Component
public class User {private String name="陈声铭";@Value("陈声明")//相当property name2="name" value="陈声明2"/>private String nam2;
private String name;@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}

和@Component功能一样的还有四个,都是将某个类注册到Spring,装配Bean。
一般用在dao层【@Repository】
一般用在service层【@Service】
一般用在controller层【@Controller】

构造器注入

注入类User(构造函数,set函数)

@Data
public class User{private String name;private int age;public User(String name,int age){this.name = name;this.age = age;System.out.println("有参构造方法调用");}public User(){this.name = null;this.age = 0;System.out.println("无参构造方法调用");}
}

注入类的配置(构造函数,set函数)

<?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"><bean name="User" class="com.pojo.User"><property name="name" value="陈声铭"/><property name="age" value="23"/></bean>
</beans>

测试

    public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("UserBean.xml");User user = (User)applicationContext.getBean("User");System.out.println(user);}

Spring自学日志02(对象的创建,依赖注入)相关推荐

  1. 详解spring的IOC控制反转和DI依赖注入

    转载 详解spring的IOC控制反转和DI依赖注入 2018-06-05 15:45:34 jiuqijack 阅读数 2945 文章标签: spring IOC控制反转 DI依赖注入 更多 分类专 ...

  2. (八)Spring之IOC控制反转、DI依赖注入介绍和使用(详解)

    文章目录 前言 Spring Spring IOC 简介 Bean IOC 概述 IOC 本质理解 Spring IOC 应用 IOC xml装配 IOC 依赖注入 IOC Bean的作用域 IoC ...

  3. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...

  4. 三大框架之spring框架+IoC控制反转、DI依赖注入

    三大框架:业务层框架Spring+IoC+DI 往期文章:jsp与cookie.重定向与RESTFul架构支持 下一章节: 持久层框架MyBatis 初识Spring框架 MyBatis 入门http ...

  5. Spring_01 spring容器、控制反转(IOC)、依赖注入(DI)

    目录 1 什么是spring框架 2 spring框架的特点 3 spring容器 3.1 什么是spring容器 3.2 spring容器创建对象的编程步骤 3.4 spring容器创建对象的方式 ...

  6. Spring框架中的控制反转和依赖注入

    控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...

  7. java 注入日志_java框架学习日志-5(常见的依赖注入)

    依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入. 依赖-- ...

  8. Spring MVC应用@Autowired和@Service进行依赖注入

    在前面学习的控制器中并没有体现 MVC 的 M 层,这是因为控制器既充当 C 层又充当 M 层.这样设计程序的系统结构很不合理,应该将 M 层从控制器中分离出来. Spring MVC 框架本身就是一 ...

  9. Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项

    4.2 真正开始解析依赖项(最核心方法) org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveD ...

最新文章

  1. 在Cisco交换机上实现隔离访问
  2. 从一次线下读书会获得的收获
  3. oracle自动把SID给改了,Oracle SID修改方式的详解
  4. APP签名MD5获取
  5. 搜索图片及相似度探秘 二
  6. 华为Java开发编程最新军规,谁违反谁滚蛋!
  7. jad环境变量配置_Jad_反编译Class文件
  8. python基础:sys模块
  9. Unity 代码实现锁定手机横屏
  10. ps 读取计算机特定首选项时出错,PS操作中常见的疑难杂症之首选项
  11. Windows7Windows10兼容红色警戒
  12. Windows 10注册表损坏该如何修复?
  13. CSS中的em运用详解,1em等于多少像素?
  14. Android 状态栏常规操作(状态栏显示,状态栏颜色,沉浸式状态栏)
  15. 力扣报错 error: <identifier> expected
  16. AliOS Things入门(1) 基于STM32L4与MDK搭建AliOS Things2.1.0开发环境
  17. 无法访问localhost与127.0.0.1/本地服务器的解决办法
  18. 综合练习Java算法
  19. 消息Hander dispatchfalled; nested excepton is java.ang.NOSuchMethodError: org.springramewrk.utl.tring
  20. 18个网站的Python爬虫登录示例 | 开源项目推荐

热门文章

  1. java8与函数编程资料
  2. 开源的python机器学习模块
  3. 从命令行获取两个路径名称并找出文件一样内容一样的两个文件
  4. 20145217 《信息安全系统设计基础》第0周学习总结
  5. Hibernate 学习-1
  6. LoadRunner11-遇到问题及解决办法
  7. mysql select语句执行顺序
  8. byte[]和string
  9. 我开博客啦,呵呵,欢迎各位朋友。
  10. What's the QPSK?