Spring自学日志02(对象的创建,依赖注入)
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(对象的创建,依赖注入)相关推荐
- 详解spring的IOC控制反转和DI依赖注入
转载 详解spring的IOC控制反转和DI依赖注入 2018-06-05 15:45:34 jiuqijack 阅读数 2945 文章标签: spring IOC控制反转 DI依赖注入 更多 分类专 ...
- (八)Spring之IOC控制反转、DI依赖注入介绍和使用(详解)
文章目录 前言 Spring Spring IOC 简介 Bean IOC 概述 IOC 本质理解 Spring IOC 应用 IOC xml装配 IOC 依赖注入 IOC Bean的作用域 IoC ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...
- 三大框架之spring框架+IoC控制反转、DI依赖注入
三大框架:业务层框架Spring+IoC+DI 往期文章:jsp与cookie.重定向与RESTFul架构支持 下一章节: 持久层框架MyBatis 初识Spring框架 MyBatis 入门http ...
- Spring_01 spring容器、控制反转(IOC)、依赖注入(DI)
目录 1 什么是spring框架 2 spring框架的特点 3 spring容器 3.1 什么是spring容器 3.2 spring容器创建对象的编程步骤 3.4 spring容器创建对象的方式 ...
- Spring框架中的控制反转和依赖注入
控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...
- java 注入日志_java框架学习日志-5(常见的依赖注入)
依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入. 依赖-- ...
- Spring MVC应用@Autowired和@Service进行依赖注入
在前面学习的控制器中并没有体现 MVC 的 M 层,这是因为控制器既充当 C 层又充当 M 层.这样设计程序的系统结构很不合理,应该将 M 层从控制器中分离出来. Spring MVC 框架本身就是一 ...
- Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项
4.2 真正开始解析依赖项(最核心方法) org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveD ...
最新文章
- 在Cisco交换机上实现隔离访问
- 从一次线下读书会获得的收获
- oracle自动把SID给改了,Oracle SID修改方式的详解
- APP签名MD5获取
- 搜索图片及相似度探秘 二
- 华为Java开发编程最新军规,谁违反谁滚蛋!
- jad环境变量配置_Jad_反编译Class文件
- python基础:sys模块
- Unity 代码实现锁定手机横屏
- ps 读取计算机特定首选项时出错,PS操作中常见的疑难杂症之首选项
- Windows7Windows10兼容红色警戒
- Windows 10注册表损坏该如何修复?
- CSS中的em运用详解,1em等于多少像素?
- Android 状态栏常规操作(状态栏显示,状态栏颜色,沉浸式状态栏)
- 力扣报错 error: <identifier> expected
- AliOS Things入门(1) 基于STM32L4与MDK搭建AliOS Things2.1.0开发环境
- 无法访问localhost与127.0.0.1/本地服务器的解决办法
- 综合练习Java算法
- 消息Hander dispatchfalled; nested excepton is java.ang.NOSuchMethodError: org.springramewrk.utl.tring
- 18个网站的Python爬虫登录示例 | 开源项目推荐