一、pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>A02spring</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--https://mvnrepository.com/artifact/org.springframework/spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api --> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
二、spring的xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.wuxi"></context:component-scan> </beans>
三、bean
package com.wuxi.benas; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; /* 一、注解创建对象(四个注解功能一样) @Component:属性value用于指定bean的id,它的默认值是当前类名(首字母小写) @Controller:一般用在表现层 @Service:一般用在业务层 @Repository:一般用在持久层 二、注入数据(注解无法注入集合类型数据,只有xml方式可以注入) @Autowired @Autowired private Student student; 1、容器中bean的id作为key,class作为value 2、注入时,首先会在容器中匹配数据类型(Student和class) 3、当有多个数据类型可匹配时,则匹配变量名称(student和id) @Qualifier @Autowired @Qualifier("studentAnno") private Student student; 1、根据@Qualifier的value值,匹配容器中的id 2、必须和@Autowired一起使用 @Resource @Resource(name="studentAnno") private Student student; 1、相当于@Autowired+@Qualifier @Value @Value("mengmeiqi") private String name; 1、可以注入String类型或者基本数据类型的数据,以上三种无法注入 2、属性值可以使用${}表达式,来注入配置文件中的数据 3、创建对象方式 @Scope singleton:单例;生命周期与容器一致 prototype:多例;使用时创建。没有引用时,由垃圾回收器销毁 4、生命周期回调 @PostConstruct:对象创建回调方法 @PreDestroy:对象销毁回调方法 */ @Component("gradeAnno") @Scope("singleton") public class Grade { @Resource(name="studentAnno") private Student student; @PostConstruct public void initMethod(){ System.out.println("对象创建"); } @PreDestroy public void destoryMethod(){ System.out.println("对象销毁"); } public void studentMethod() { student.study(); } }
四、使用
package com.wuxi.tests; import com.wuxi.benas.Grade; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MySpringTest { public static void main(String[] args) { // ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml"); ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("application.xml"); /* // 测试注解 Grade grade = ac.getBean("gradeAnno", Grade.class); grade.studentMethod(); // 测试对象创建方式 Grade grade1 = ac.getBean("gradeAnno", Grade.class); Grade grade2 = ac.getBean("gradeAnno", Grade.class); System.out.println(grade1 == grade2); */ // 测试生命周期回调 ac.getBean("gradeAnno", Grade.class); ac.close(); } }