目录
一、spring简介
二、创建项目
三、spring创建对象
四、SpringBean管理
1.注入实现-XML
2.注入实现-注解
spring诞生与2003年,是一个轻量级的、IOC( Inversion Of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)的java开发框架,为了简化企业级应用开发。
1.Maven导入spring核心基础jar包
添加spring-context jar包
org.springframework
spring-context
5.2.2.RELEASE
2.编写spring配置文件
1.在bean添加spring框架需要管理的类:
如下class为类地址,id为唯一标识
设置bean中的scope:
singleton:只创建一个bean对象,在启动spring时创建(默认形式)
prototype:在每次获取对象时创建,创建新的bean对象
2.启动spring:
spring.xml为spring的配置文件(含有约束和管理的类)
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
创建对象:其中参数user为bean管理类的id,第二个参数为该类的Class对象,我们让spring帮我们创建了对象,把创建对象的控制权限交给了spring框架,再也不用new对象,这就是IOC“反转控制”的思想。
User user = applicationContext.getBean("user", User.class);
System.out.println(user);
IOC 底层实现方式: 解析 xml/扫描注解标签 + 工厂模式 + 反射机制
依赖注入:创建对象时,需要为对象的属性进行赋值。
注入方式:
set方法
构造方法
set方法 :name 为属性名,value为值
构造方法:name 为构造方法的参数名,value为传入参数的值
属性含有对象时:
例如:UserService类中含有userDao对象,有userDao的set方法,实现对userDao中方法的调用:
public class UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void insert(User user) {
userDao.insertUser(user);
}
}
UserDao类
public class UserDao {
public void insertUser(User user){
System.out.println("保存成功");
}
}
XML如下,与为简单属性赋值的方式有一点不同,在property标签中的value要改为ref,表示引用此id的类:
测试:
public class TestUser{
@Test
public void test1(){
//启动spring
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
//spring创建user对象作userService.insert方法的为参数
User user = applicationContext.getBean("user3", User.class);
System.out.println(user);
//spring创建userService对象并创建属性为UserDao的对象
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.insert(user);
}
}
输出结果:
开启注解扫描:
在spring的xml配置文件中配置:此处配置的为需要扫描的包,包含里面所有的类
添加约束:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
添加后的spring.xml文件
相关注解:
实现创建对象功能:
@Component(value=“user”)等于
@Service:通常添加到Service层的类名之上
@Repository:通常添加到Dao层的类名之上
Scope设置:
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例
依赖注入:
@Autowired和@Qualifier是spring框架提供的,@Resource是JDK提供的。
示例:
@Service
public class UserService {
@Resource
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void insert(User user) {
userDao.insertUser(user);
}
}
@Repository
public class UserDao {
public void insertUser(User user){
System.out.println("保存成功");
}
}
public class Test {
@Test
public void test1(){
//启动spring
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
User user1 = applicationContext.getBean("user", User.class);
UserService userService = applicationContext.getBean(UserService.class);
userService.insert(user1);
}
}
输出结果: