Spring笔记
很早之前就听说过这个框架了,但是今年二月份才开始学╰( ̄ω ̄o),未必是有些晚了,现在又重新学期,有了之前学idea的经验,应该也不是什么问题
贴一个文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html
第一个程序
IoC和DI的概念
- IoC:控制反转(设计原则)由容器主动将资源推送到它所管理的组件里,组件要有接受资源的方式
- DI:依赖注入(IoC的典型实现)
好了,光知道这个思想其实没什么用,下面开始编码
步骤
- 创建maven项目
- 在pom.xml中添加相应的依赖
- 👴忘了
pom.xml里的依赖
<!--Spring核心基础依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--日志相关-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
3种配置元数据的方法
基于Xml的配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- id写什么都行 只要保证唯一就行,在Spring容器中用id来调用-->
<!-- class要写完整路径,Spring运行时通过class这个路径来实例化对象放入Spring容器中 -->
<bean id="InteCpu" class="com.pc.InteCpu"></bean>
<bean id="Computer" class="com.pc.Computer">
<!-- name要写Computer中的类名名称 -->
<!-- ref依赖注入,ref里写id -->
<property name="cpu" ref="InteCpu"></property>
</bean>
</beans>
然后引用:
package com.pc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//接口
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Computer pc=(Computer)ctx.getBean("Computer");//从Spring容器内调用id为Computer的类(?不知是否改用这个词)
pc.play();//运行
}
}
基于注解的配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 用注解的方式 -->
<context:annotation-config/>
<!-- 说明包在哪,然后就会帮你扫描com.pc下所有的类
当扫描到@Component的时候,则会帮你把这个"组件"实例化出来放入
Spring容器中(自动分配的id首字母是小写的),当扫描到@Resource的时候,说明要依赖注入,Spring会自动帮你引入依赖-->
<context:component-scan base-package="com.pc">
</context:component-scan>
</beans>
比如:
package com.pc;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
/**
* 配置元数据第二种方法:基于注解的配置
*/
@Component("Computer")
public class Computer {
//加入这个标签,说明
@Resource
private Cpu cpu;
public void setCpu(Cpu cpu) {
this.cpu = cpu;
}
public void play() {
this.cpu.run();
System.out.println("computer is playing by annotation");
}
}
引用的方法和基于Xml的配置
的差不多
基于Java的配置
此方法没有xml文件,纯java引用
package com.pc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@Configuration
@ComponentScan("com.pc")
public class Test {
public static void main(String[] args) {
//接口
ApplicationContext ctx=new AnnotationConfigApplicationContext(Test.class);
Computer pc=(Computer)ctx.getBean("Computer");
pc.play();
}
}
需要添加注解,此方法可以理解为另一种形式的基于注解的配置
当扫描到@Component的时候,则会帮你把这个"组件"实例化出来放入 Spring容器中(自动分配的id首字母是小写的),当扫描到@Resource的时候,说明要依赖注入,Spring会自动帮你引入依赖
感觉,还是基于xml的配置更好些,修改方便,然后,也方便复用(雾(+_+)?