一、对象存储
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 {@Beanpublic 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 容器中读取到对象) @Resourceprivate UserService userService;
优点:简单
缺点:
1.没办法实现final修饰的变量注入
2.兼容不好只适用于Ioc容器
3.风险:违背单一设计原则的概率更多
2.Setter注入
// // 2.Setter 注入private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}
优点:符合单一设计原则
缺点:1.不能注入不可变对象(final)
2.使用setter对象可能会被修改
3.构造方法注入
private final UserService userService;@Autowiredpublic 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对象