Spring基于注解 的IOC的依赖注入

新建 project maven## 标题

初识 注解的 开发 是:将 熟悉的 xml 结合的 完成学习的

–>(需要官方的文档支持 没有:不能运行)
》AOPjar包 的 -----xml 的配置–告知Spring要扫描的 包
xml 约束 文件 ----》要的标签 在 Framwork 核心文件 xmlns:Context
在bean.xml 里
告知Spring 在创建容器 要扫描 的包===============》关键要有的官方的文档=======》
context 名称空间 的约束======去Spring的官方 文档 里去找
找到我们上一次浏览的 并收藏的额 Spring官方文档 进入core
注意 chrome : 在线会有翻译的
===ctrl+F搜索xmlns:context
copy :内容 (将原来的 换做 context 的xml)

<?xml version="1.0" encoding="UTF-8"?>




<context:component-scan base-package=“com.fhw”></context:component-scan>


准备 还是在之前的基础上

使用注解------> 创建对象
@component 属性:value 默认的 默认的改注解所在类的首字母小写
当@component里写的指定的字符串是 main方法里的 getBean(就要与对应写的一样)
当@Component没有值的时候 ,
在main方法里getBean()里的字符串值 :写注解 的 类: 名首字母:改小写(实际中还是大写的)
getBean(): 用于指定要运行的类(首字母小写)
注解的里值的注意: 一个值得时候 value 不写就行(value 可省略)
多个值的时候:就要分别的value指定

构造函数里的:输出语句:----》你这时不写 getBean()也是可以运行的-----》

dao持久层

package com.fhw.dao;
/* 账户持久层接口*/
public interface IAccountDao {
/* 模拟保存账户的操作*/
void saveAccount();
}

-------dao实现类 们

package com.fhw.dao.impl;

import com.fhw.dao.IAccountDao;
import org.springframework.stereotype.Repository;

import java.lang.annotation.Retention;

/* 账户持久层实现类* /

1

@Repository(“accountDao1”)
public class IAccountDaoImpl implements IAccountDao {

public void saveAccount() {
   System.out.println("accountDao1:--- getBean(使用注解 完成 :保存了账户");
}

}

—2

package com.fhw.dao.impl;

import com.fhw.dao.IAccountDao;
import org.springframework.stereotype.Repository;

import java.lang.annotation.Retention;

/* 账户持久层实现类*/
@Repository(“accountDao1”)
public class IAccountDaoImpl implements IAccountDao {

public void saveAccount() {
   System.out.println("accountDao1:--- getBean(使用注解 完成 :保存了账户");
}

}
《这2个 类 是: 为 了演示 在下面 Service 调用@Autowired:
public class IAccountServiceImpl implements IAcconutService
@Autowired
//位置: 变量上 方法上
private IAccountDao accountDao1;
-----------------------》
自动 按照类型 注入
只要容器中唯一的bean对象类型的 和要注入的变量类型匹配,就可以注入成功
当 多个类型相同的时候 就会 根据 变量名 去匹配(变量名就是 ===注解 的值)
@Autowired:位置: 变量上 方法上》
|例: @Autowired()
| private IAccountDao accountDao2; // private IAccountDao accountDao1;
-----------------》
| @Repository(“accountDao1”)
| public class IAccountDaoImpl implements IAccountDao {
| @Repository(“accountDao2”)
| public class IAccountDaoImpl2 implements IAccountDao {

@Qualifier
当有了: @Qualifier 就可以指定 要实现 的 注解 要与 @Autowired() 在一起 : 才有作用
//位置: 变量上 方法上
例: | @Autowired
| @Qualifier(“accountDao1”)//(这里做了 指定)
| private IAccountDao accountDao; (不用改了)
@Resource @Resource : 按照bean的id 注入 --》独立使用
:属性: name 指定bean 的id

例 |@Resource(name = “accountDao2”)
|private IAccountDao accountDao=null;

service------业务层

package com.fhw.service.impl;

import com.fhw.dao.IAccountDao;
import com.fhw.dao.impl.IAccountDaoImpl;
import com.fhw.service.IAcconutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/*:曾经的 xml 配置

scope=“” init-method=“” destroy-method>
<property name="" value="" / ref="">

我们对应 xml 配置来看: Annotation直接的配置
annotation 的 @ 标识的功能是什么
1:@component-用于 创建 的对象的

L在配置文件里创建 编写一个bean配置文件 的功能是一样的id 与 Class 的完成:
@component : 用于 创建 的对象的 位置 : 类上面
@component 属性:value 默认的 默认的改注解所在类的首字母小写
当@component里写的指定的字符串是 main方法里的 getBean(就要与对应写的一样)
当@Component没有值的时候 ,你这时不写 getBean()也是可以运行的-----》
在main方法里getBean()里的字符串值 :写注解 的 类: 名首字母:改小写(实际中还是大写的)
getBean(): 用于指定要运行的类(首字母小写)
注解的里值的注意: 一个值得时候 value 不写就行(value 可省略)
多个值的时候:就要分别的value指定
多层 分别的时候的 3个注解
@controller:----》表现层
@Service:---->业务层
@Repository:----》持久层
他们 都能实现原因是: 底层extends了component 的

2:-----用于 注入的数据 的 :就是xml 的property 里的 改变作用范围 或constructor-arg
注入:@Autowired:自动 按照类型 注入
只要容器中唯一的bean对象类型的 和要注入的变量类型匹配,就可以注入成功
当 多个类型相同的时候 就会 根据 变量名 去匹配
@Autowired:位置: 变量上 方法上
@Qualifier:在类中注入基础上在按照 名称注入 ,类里要搭配在@Autowired
但是: 方法的参数里 是 :单独 作用 (后面再讲)
属性: value 指定注入bean的id的
3:改变作用范围的 —scope 的属性是一样的:
4: 和生命周期相关的: 在bean 标签的里 init-method 和destroy
/
@Service(“accountService”)
//@Component()
public class IAccountServiceImpl implements IAcconutService{
@Autowired//只要容器中唯一的bean对象类型的 和要注入的变量类型匹配
//位置: 变量上 方法上
private IAccountDao accountDao1;
/
public IAccountServiceImpl() {
accountDao.saveAccount();
System.out.println(" 构造方法里: 使用 @Component 与 xmlns:omtext 来完成注解功能 " );
}
*/
public void saveAccount() {
accountDao1.saveAccount();
// System.out.println(" main 里 调用 getBean 使用 @Component 与 xmlns:omtext 来完成注解功能");
}
}

测试=------main

package com.fhw.ui;

import com.fhw.service.IAcconutService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {
/**
*

  • @param args
    */
    public static void main(String[] args) {

    //获取 spring 的核心容器对象: 参数就是 bean.xml
    ApplicationContext ac=new ClassPathXmlApplicationContext(“bean.xml”);

    IAcconutService as = (IAcconutService)ac.getBean(“accountService”);

as.saveAccount();

}
}

–基本数据类型的就是value
–改变作用范围以及和生命周期相关的注解--------------》

@scope : 用于类 的位置 ====》了解
制定与 初始化 与销毁的
@PostConstruct作用:用于指定初始化方法。 @PreDestroy作用:用于指定销毁

============= ${}: 使用范围 :==========
在jquery 里的就是4个域对象
在Spring里就是 基本数据类型的 el 表达式

猜你喜欢

转载自blog.csdn.net/qq_41934719/article/details/84668606