一、对象存储
1.创建bean对象
public class User {
public void sayHi() {
System.out.println("hi student");
}
}
2.bean存入Spring
在spring-config.xml,将 bean(com.spring.demo.User)存到 Spring 容器中,它的名称叫做 id id指的是将对象存储在IOC容器的姓名,class是要存储到IOC 中完整的Bean路径包括包名+类名
<bean id="user" class="com.spring.demo.User"></bean>
3.容器获取到bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
4.获取Bean对象
get bean 用法
4.1根据用户名称获取Bean对象(id)
Use user = (User) context.getBean("user"); // 根据名称获取
4.2根据类型获取Bean对象
当同一个类型注入到Spring多个情况,使用类型获取Bean就会报错
User user = context.getBean(User.class); // 根据类型获取
4.3根据用户名称+类型获取Bean对象
User user = context.getBean("user", User.class);
二、类注解
1.必要工作
<content:component-scan base-package="com.java.demo"></content:component-scan>
2.@Controller
控制器,验证数据的准确性
2.1@Controller实现Bean处理
package com.java.demo.controller;
import org.springframework.stereotype.Controller;
@Controller
public class SController {
public void sayHi() {
System.out.println("do SController sayHi()");
}
}
2.2读取Bean
详见本文第一项对象存储
3.@Service
服务,编排调度实际方法的
4.@Repository
持节层和数据库交互的
5.@Component
工具类
6.@Configuration
配置项
三、使用@Bean方法注解存储对象到Spring容器
1.bean对象命名 存储对象的名称为方法名
2.@Bean 配合五大类注解
@Component
@Order(1) // 控制注入的顺序
public class UserBeans {
@Bean
public User getuserbyid() {
User user = new User();
user.setUid(1);
user.setUsername("张三");
user.setPassword("123456");
user.setAge(18);
return user;
}
3.@Bean重命名
@Bean(name={"名字"})
重命名后默认使用方法获取对象方法不可使用
四、对象注入
从Spring容器中读取某个对象,放到当前类里面
1.属性注入
1.属性注入
@Autowired // 注入对象(更加简单的从 spring 容器中读取到对象)
@Resource
private UserService userService;
优点:简单
缺点:
1.没办法实现final修饰的变量注入
2.兼容不好只适用于Ioc容器
3.风险:违背单一设计原则的概率更多
2.Setter注入
// // 2.Setter 注入
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
优点:符合单一设计原则
缺点:1.不能注入不可变对象(final)
2.使用setter对象可能会被修改
3.构造方法注入
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
优点:1.可以注入不可变对象
2.注入对象不会改变(构造方法只能执行一次)
3.保证注入对象完全被初始化
4.通用性更好
5.@Autowired vs @Resource
@Autowired根据类型查找 之后根据名称查找
@Resource 根据名称查找 之后根据类型查找
五、lombok使用
1.在框架中添加lombok依赖
pom文件添加
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
2.使用注解
3.添加lombok插件
六、Bean作用域
1.单例模式 singleton
2.原型模式 prototype
3.请求作用域 request 每次请求都会创建一个Bean对象 适用于 Spring MVC/Spring Web
4.会话作用域 session 每次会话共享一个Bean对象 适用于 Spring MVC
5.全局作用域 application 一个Http servlet 中共享一个bean
@Scope(value = "prototype")
七、Bean生命周期
1.开辟内存空间
2.设置属性(注入属性)
3.初始化
各种通知
初始化前置方法
初始化方法(xml、注解方法)
初始化后置方法
4.使用Bean
5.销毁Bean对象