1,新建maven-》quickstart;
2,导入依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<!-- spring context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!-- spring aop-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<!-- 日志 logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
3,配置spring的配置文件:名称没有要求(一般叫applicationContext.xml);
4,spring的核心API
mybatis的核心API是SqlSessionFactory,而spring的核心API就是ApplicationContext(接口?屏蔽实现的差异):用户对象的创建。
非web环境:ClassPathXmlApplicationContext。web环境XmlWebApplicationContext。
该工厂是重量级资源,一般一个应用只有一个。
5,程序开发spring。
1,创建类。2,在配置文件中配置。3,工厂得到。
1,创建类
public class Person {
private String name;
private Integer age;
//getter,setter略
}
2,配置文件配置
<!--定义对象,id指定id(unique),class指定类-->
<bean id="person" class="begin.Person"></bean>
3,工厂得到对象
/**
* 用于测试:spring工厂得到对象实例
*/
@org.junit.Test
public void test1(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
System.out.println(person);
}
6,细节:spring工厂创建的一般叫bean或者component。
getBean()方法的重载。
1,ctx.getBean("id"):object
根据id来获得类的实例(需要强制转型)
2,ctx.getBean("id",class):原类对象
根据id和class来获得对象实例(不需要强制转型)
3,ctx.getBean(class):原类对象 :
根据class来获得对象实例,但是这样的class只能对应一个id
4,ctx.getBeanDefinitionNames() :String []返回所有在bean中定义id标签的名字
获得class的所有id名
5,ctx.getBeanNamesForType(Student.class):String[] 返回这个class的id名数组
根据类型来获得ids
6,ctx.containsBeanDefinition(id):Boolean
来判断是否存在指定的id
7,ctx.containsBean(id):Boolean
来判断是否存在指定的id和name属性
7,配置文件的分析:
1,只配置class的类存在id吗?存在,只不过是spring为你指定的,后期不能引用。若这个id需要后期引用,需要指定。
2,name属性,作用:在spring配置文件中,为bean对象配置小名。
id和name的异同:
相同:
Ctx.getBean("id|name")-->object
<bean id="" class="">
||
<bean name="" class="">
不同:
1,别名可以有多个。
<bean name="n1,n2,n3" class="">
2,xml的id属性的值,命名要求:必须以字母开头,字母,数字,下划线,连字符组成。不能以特殊的字符开头比如“?”等。
而name属性的值,则没有要求,
name属性会应用在特殊命名的场景下:比如/student(spring+struts1)
xml发展到今天,id属性的命名没有了要求
3,代码的区别:
两个方法的区别:
ctx.containsBeanDefinition(id):Boolean 只能判断id属性
ctx.containsBean(id||name):Boolean 可以判断id和name属性
备注:日志logback的简单配置:
在logback.xml中
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} -%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"></appender-ref>
</root>
</configuration>