新建 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)
<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 表达式