栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Day02(20211009)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Day02(20211009)

一.DI(依赖注入)
  • 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源
  • 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配
1. 依赖注入方式 1.1 构造函数注入


Emp.java 员工类

public class Emp {
	private String name = "tom";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Emp [name=" + name + "]";
	}
	
}

Com.java 公司类(包含员工属性)

public class Com {
	private String name;
	private Emp emp;

	public Com(Emp emp) {
		this.emp = emp;
	}

	public Com(String name, Emp emp) {
		super();
		this.name = name;
		this.emp = emp;
	}

	public Com(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Com [name=" + name + ", emp=" + emp + "]";
	}
		
}

applicationContext.xml

	
	
	
	


	
		
		
	

	
		
		
	

	
		
		
		
		
		
		
		
		
		
			
		
	

SpringTest.java

public class SpringTest {
	public static void main(String[] args) {

		BeanFactory bf = new ClassPathXmlApplicationContext("b4.xml");
		Com com = (Com)bf.getBean("com");
		System.out.println(com);
		
		Com com1 = (Com)bf.getBean("com1");
		System.out.println(com1);
		
		Com com2 = (Com)bf.getBean("com2");
		System.out.println(com2);
		
	}
}

结果:

1.2 属性注入


被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写;
如果属性是boolean类型 , 没有set方法 , 是 is。

  • 1.2.1 简单类型属性注入
    property - value
  • 1.2.2 复杂类型属性注入
    property - ref

applicationContext.xml

	
	
	
		
		
		
		
		
			Jack
		
		
		
		
			
		
	

SpringTest.java

public class SpringTest {
	public static void main(String[] args) {

		BeanFactory bf = 
				new ClassPathXmlApplicationContext("b5.xml");
		Com com = (Com)bf.getBean("com");
		System.out.println(com);
		
	}
}
Com [name=Jack, emp=Emp [name=tom]]
  • 1.2.3 集合类型属性注入

applicationContext.xml

	
	
	
	
	
		
		
			
				set1
				set2
			
		

		
			
				list1
				list2
			
		

		
			
				
				
			
		
		
		
			
				pva1
				pva2
			
		
		
		
			
				bleanlist-1
				
				
			
		
	
		
			
				"aaa"
				"bbb"
			
		
	

SpringTest.java

public class SpringTest {
	public static void main(String[] args) {
		BeanFactory bf = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		Beans bs = (Beans)bf.getBean("bs");
		System.out.println(bs);
	}
}
Beans [sets=[set1, set2], list=[list1, list2], map={key1=value1, key2=value2}, props={pk2=pva2, pk1=pva1}, beanList=[bleanlist-1, Emp [name=tom], Emp [name=tom]], ar**加粗样式**rays=["aaa", "bbb"]]
1.3 接口注入

Spring不支持

2. 装配方式 2.1手工 2.1.1 配置文件(applicationContext.xml) 2.1.2 注解
  • @Autowired
    以前学习的属性注入都是通过标签,但应用 @Autowired 注解后,就不必再写,而是在被装配的属性或它的set方法上写上 @Autowired ,spring就会自动在配置文件中查找响应的bean,进行注入。
    • :与@Autowired搭配使用,通知容器去查注解;
    • 位置:属性声明,方法声明;
    • @Qualifier:在配置文件中查找多个合适的bean时,通过 @Qualifier指定。
    • @Autowired(required = false) :设置依赖对象可以为null


MyBean.java

public class MyBean {
	@Override
	public String toString() {
		return "MyBean";
	}
}

FieldBean.java

public class FieldBean {
	//属性声明
	@Autowired
	//@Qualifier(value="mb2") 指定所装配的bean名称
	//@Autowired(required = false) 设置依赖对象可以为null
	private MyBean mb;

	public MyBean getMb() {
		return mb;
	}

	//方法声明
	//@Autowired
	public void setMb(MyBean mb) {
		this.mb = mb;
	}

	@Override
	public String toString() {
		return "FieldBean [mb=" + mb + "]";
	}
	
}

applicationContext.xml

	
	

	
	
	
	
	
  • @Resource
    与 @Autowired 的用法基本相同
  • @Resource 与 @Autowired 的不同点
    • @Autowired默认按类型装配;
      首先在容器中查找对应类型的bean,如果查询结果为1,则将该Bean装配给指定的属性。
      如果查询结果不唯一,则会根据名字查找。
      默认情况下,要求依赖对象必须存在,如果要允许为空,可以设置required属性为false。
      如果想直接使用名称装配,可以结合@Qualifier注解一起使用。
    • @Resource默认按名称装配;
      当找不到与名称匹配的bean,会按类型装配。
      名称通过name属性设置。
      如果没有name属性时,则默认取字段的名称。
      如果没有指定name属性,并且按找默认属性名找不到依赖对象时,则会按照类型进行装配,但是一旦指定了name属性则只能按名称进行装配。
2.2 自动
  • 2.2.1 按类型
  • 2.2.2 按名称

applicationContext.xml

	
	
	
	
	
	
	

SpringTest.java

public class SpringTest {
	public static void main(String[] args) {

		BeanFactory bf = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		TestBean tbbyType = (TestBean) bf.getBean("tbbyType");
		TestBean tbbyName = (TestBean) bf.getBean("tbbyName");
		System.out.println(tbbyType);
		System.out.println(tbbyName);
		
	}
}
TestBean [mybean=com.dr.s8.MyBean@101952da]
TestBean [mybean=com.dr.s8.MyBean@101952da]
2.3 自动扫描(最常用的方式)

自动扫描“包”下的类,然后就可以根据注解中的值作为getBean()的参数创建对象。


applicationContext.xml

	
	
	
	

DemoController.java

//@Component("controller")
@Controller("controller")
public class DemoController {
	@Override
	public String toString() {
		return "controller";
	}
}

DemoService.java

@Service("service")
public class DemoService {
	@Override
	public String toString() {
		return "service";
	}
}

SpringTest.java

public class SpringTest {
	public static void main(String[] args) {

		BeanFactory bf = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		DemoController dc = (DemoController) bf.getBean("controller");
		DemoService ds = (DemoService) bf.getBean("service");
		
		System.out.println(dc);
		System.out.println(ds);
		
	}
}
controller
service
二.AOP(面向切面编程)

AOP是Spring框架中一个关键的组件,AOP提供另外一种角度来思考程序结构,通过这种方式,弥补面向对象的不足。

2.1 应用范围
  • 安全
  • 日志、跟踪、优化、监控
  • 事务管理
  • 性能优化
2.2 核心概念

2.3 底层原理:动态代理

原理详见设计模式。

三.事务

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号