spring的bean管理
*****spring的bean管理(xml方式)*****
bean实例化【在spring里面,通过配置文件创建对象】 三种方式实现
1:在类中,使用类的无参构造创建(重点)
2:使用静态工厂创建Bean2实例化对象
在类中创建静态方法,返回类对象
3:使用实例工厂创建Bean3实例化对象
创建一个不是静态的方法,返回类对象
《Bean标签常用属性》
1--id属性:
起名称 不能有中文或特殊符号(下划线也不行) 根据id值得到配置对象
2--class属性:
创建对象所在类的全路径
3--name属性:
功能和id属性是一样的 (但这个属性值里边可以包含特殊符号)、、
4--scope属性:表示bean的作用域范围
singleton:默认值 单例--对象只会创建一次
prototype:多例
request、session、globalSession
《属性的注入介绍》
1.创建对象的时候 ,给类的属性赋上值
2.在Java代码中给对象属性赋值的三种方式
(1)使用有参构造器
(2)set方法注入
(3)接口注入
3.在spring框架中,支持前两种注入方式
(1)使用有参方式,进行属性注入
(2)使用set方法,进行属性注入-重点
<使用set方法注入对象类型属性>
1.创建service类 和 dao类
在UserService里得到 UserDao对象
2.具体实现过程
(1)在UserService里面把UserDao作为 属性的类型
(2)生成 UserDao 类型属性的set方法
(3)在配置文件中 进行注入关系的配置
<使用set方法 P名称空间 注入对象类型属性>
第一步:xml文件配置 xmlns:p="http://www.springframework.org/schema/p"
第二步:<bean name="person" class="com.mybag.property.Person" p:pname="Eva"></bean>
<使用set方法 注入复杂类型属性>
1.数组
2.list集合
3.map集合
4.properties
《IOC和DI的区别》
1. IOC 控制反转 把对象的创建交给spring进行配置
2. DI 依赖注入 给类中的属性赋值
3. 关系:依赖注入不能单独存在,需要在ioc基础之上完成操作
《Spring整合web项目原理》
1.加载核心配置文件
//加载spring配置文件 根据配置 创建对象
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
出现的问题:每次实现 都需要new一个bean1.xml配置文件对象 效率很低
2.实现思想:
把加载配置文件和创建对象的过程,在服务器启动的时候就完成
3.底层原理:
3.1使用到的两个技术:
(1) ServletContext对象
(2) 监听器
3.2具体使用:
-在启动服务器的时候,为每个项目创建一个ServletContext对象【s对象】
-在s对象创建的时候,使用监听器可以监听到它 是在什么时候创建的
01. 当监听到s对象创建的时候 ,
此时,就会加载spring配置文件
并把配置文件中 所配置的相应对象 给创建出来
02. 把相应的对象 放到ServletContext域对象里面(setAttribute方法)
03. 当我们再获取这个相应对象的时候 就可以从ServletContext域中得到了(getAttribute方法)
*****spring的bean管理(注解annotation方式)*****
《注解》
1.代码里边的特殊标记
@Test
@Override
2.写法:
@注解名称(属性名称=属性值)
3.可以使用在类、方法、属性上面
看具体代码
《Spring注解开发准备工作》
1.导入基本jar包
2.创建类、方法
3.创建spring配置文件bean1.xml,引入约束
4.在配置文件中开启注解扫描*
《注解方式创建对象》
1.在创建对象的类 上面 使用@Component注解 来创建出User对象
@Component(value="user")---value其实可以省略不写
2.创建对象有四个注解
spring中提供@Component的三个衍生注解(功能目前来讲是一致的,都是用来创建对象)
@Controller --WEB层 *
@Service --业务层 *
@Respository --持久层
这三个注解是为了让标注类本身的用途清晰,spring在后续版本会对其增强
3.创建对象
单例【默认】
@Component(value="user")
@Scope(value="singleton")
多例
@Component(value="user")
@Scope(value="prototype")
《注解方式注入属性》
1.注入对象类型属性 @Autowired
通过UsetDao这个类名 找到这个类 对应的对象
与@Component("userDao")中的userDao没有关系
这也是它的一个缺点,因为它的指向 不是很清晰
(1)创建UserService类 并生成对象
@Service("userService")
(2)创建UserDao类 并生成对象
@Component("userDao")
(3)在UserService类中
通过 @Autowired 自动装配
得到UsetDao对象
完成对象类型属性的注入
2.注入对象类型属性@Resource *
优点:指向很明确
@Resource(name="userDao") name属性
与@Component("userDao")中的userDao高度匹配
《配置文件和注解混合使用》
1.在配置文件中配置对象
2.用@Resource注解方式给对象注入对象类型属性
@Resource(name="bookDao")
与<bean id="bookDao" > 高度匹配