一、 项目介绍
1、IoC容器装配Bean_基于注解配置方式–实例化Bean以及通过注解给属性赋值的几种方式
2、项目开发工具:
(1) jdk1.8.0_92
(2) IDEA-2019.3.4
(3) apache-maven-3.5.2
3、项目目录结构
二、源码
1、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>com.sougu</groupId>
<artifactId>spring_day2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--单元测试-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 日志依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</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>
<!-- spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<!-- inject注解依赖-->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>
</project>
2、resources中的配置文件
(1) log4j.properties(日志相关配置信息)
log4j.rootLogger=DEBUG,A1
log4j.logger.org.mybatis=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
(2) applicationContext.xml(Spring实体bean配置文件)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 开启注解功能-->
<!-- <context:annotation-config /> 这个可以不写,在配置包扫描的时候,spring会自动开启注解功能,所以,注解开启功能可以不配置,只写下面一句代码即可。-->
<!-- 配置注解扫描,作用会自动扫描某包或子包下面含有@Component的类,并作为bean来管理-
-->
<context:component-scan base-package="com.sou"/>
</beans>
3、service层
UserService.java
package com.sou.service;
public interface UserService {
public void login();
}
4、service实现层
UserServiceImpl.java
package com.sou.service.impl;
import com.sou.mapper.UserMapper;
import com.sou.service.UserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import org.springframework.context.annotation.Scope;
@Service("userService")
//设置bean为多例,但是不能调用销毁方法,多例没有销毁方法。默认为singleton单例
@Scope("prototype")
public class UserServiceImpl implements UserService {
//简单类型数据依赖注入
@Value("Rose")
private String name;
// 复杂类型数据依赖注入
// 第一种:使用@Value 结合SpEL #{} ---- spring3.0 后用
// @Value("#{userMapper}")
// 第二种: 使用@Autowired 结合 @Qualifier
/* 2.1单独使用@Autowired 按照类型注入
* @Autowired
*/
/*
* 2.2使用@Autowired+@Qualifier 按照名字注入
*
* @Autowired
*@Qualifier("userMapper")
*/
/* 第三种
@Resource(name = "userMapper")*/
/*
* 第四种: JSR-330标准(jdk) 提供 @Inject (麻烦点)不推荐(了解)
* 需要先导入 javax.inject 的 jar (废掉了)
* */
@Inject
UserMapper userMapper;
@Override
public void login() {
System.out.println("名字叫:" + name);
userMapper.login();
}
@PostConstruct
public void init(){
System.out.println("UserServiceImpl的初始化方法");
}
@PreDestroy
public void destroy(){
System.out.println("UserServiceImpl的销毁方法");
}
}
5、dao(Mapper)层(此中只写了简单输出语句,没与数据库交互)
UserMapper.java
package com.sou.mapper;
public interface UserMapper {
public void login();
}
6、dao(Mapper)实现层
UserMapperImpl.java
package com.sou.mapper.impl;
import com.sou.mapper.UserMapper;
import org.springframework.stereotype.Repository;
@Repository("userMapper")
public class UserMapperImpl implements UserMapper {
@Override
public void login() {
System.out.println("userMapper登录成功!");
}
}
7、UserTest文件
UserTest.java
import com.sou.service.UserService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserTest {
public ApplicationContext ac;
@Before
public void init(){
// 使用spring容器创建的对象
// 1.指定spring配置文件的名称
String config = "applicationContext.xml";
//2.创建表示Spring容器的对象,ApplicationContext
// ApplicationContext就是表示Spring容器,通过容器获取对象了
// ClassPathXmlApplicationContext :表示从类路径中加载Spring的配置文件
//注意:后期这种方式不会再使用,会使用更加简单的方式
ac = new ClassPathXmlApplicationContext(config);;
}
@Test
public void test1(){
UserService service = (UserService) ac.getBean("userService");
service.login();
}
}