当前位置: 首页 > news >正文

Spring的配置(使用注解)

一、基础知识

spring的配置

        1.spring2.5前==xml

        2.spring2.5后==xml+annotation

        3.spring3.0后==annotation+JavaConfig配置

        spring2.5后=xml+annotation

注解:

        1.注入类

替换:<bean id="" class=""></bean>

位置:类

语法:

@Component

eg:Class User{}

<bean id="user" class="com.apesource.包.User"></bean>

||等价于||

@Component

Class User{}

语法:@Component(value="注入容器中的id,如果省略id为类名且首字母小写,value属性名称可以省略")

注意:配合下面标签使用

含义:扫描所有被@Component注解所修饰的类,注入容器

 <context:component-scan base-package=""></context:component-scan

@Repository=====>注入数据访问层

@Service========>注入业务层

@Controller=====>注入控制层

以上三个注解与@Component功能语法一

        2.注入数据

@Value

含义:注入基本数据

语法:@Value("数据内容")

@Value("${动态获取}")

注意:配合下面标签使用

<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder

@Autowired

语法:@Autowired(required = "true-默认、false、是否必须进行装配")

修饰:成员变量

含义:默认按照类型自动分配,如果有则直接装配,若有多个则按照名称装配

注意:

1.若容器中有一个类型可以与之匹配则装配成功,若没有一个类型可以匹配则报错

NoSuchBeanDefinitionException

2.若容器中有多个类型可以与之匹配,则自动切换为按照名称装配,若名称没有对应,则报错

NoUniqueBeanDefinitionExceptio

        3.其他注解

@Primary

含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Qualifier(value="名称")

含义:按照名称装配

修饰:成员变量

注意:不能单独使用,必须与@Autowired联合使用

@Resource(name="名称")

含义:按照名称装配

修饰:成员变量

注意:单独使用

@Scope

含义:配置类的作用域

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Scope("prototype")

@Scope("singleton")

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON

@PostConstruct:初始化,修饰方法

@PreDestroy:销毁,修饰方法

二、注入类

@Repository=====>注入数据访问层

@Service========>注入业务层

@Controller=====>注入控制层

1.引入依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version>
</dependency>

2.创建Dao层接口

public interface IUserDao {public void save();
}

3.创建Dao层实现类

@Repository
public class UserDaoImp implements IUserDao{public void save() {System.out.println("==dao的新增==");}
}

4.创建service层接口

public interface IUserService {public void save();
}

5.创建service层实现类

@Service
public class UserServiceImp implements IUserService{public void save(){System.out.println("==业务的新增==");}
}

6.创建controller层接口

public interface IUserController {public void save();
}

7.创建controller层实现类

@Controller
public class UserControllerImp implements IUserController{public void save(){System.out.println("==控制器新增==");}
}

8.创建student实体类

@Component
//@Component(value = "stu")//起别名,下同
//@Component("stu")
public class Student {
}

9.编写spring配置文件

    <!--扫描--><context:component-scan base-package="com.ape"></context:component-scan>

9.编写测试类

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Student student=(Student)applicationContext.getBean("student");System.out.println(student);IUserController controller= (IUserController) applicationContext.getBean("userControllerImp");IUserService service=(IUserService)applicationContext.getBean("userServiceImp");IUserDao dao=(IUserDao)applicationContext.getBean("userDaoImp");controller.save();service.save();dao.save();}
}

三、注入数据

@Value

含义:注入基本数据

语法:@Value("数据内容")

@Value("${动态获取}")

注意:配合下面标签使用

<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

@Autowired

语法:@Autowired(required = "true-默认、false、是否必须进行装配")

修饰:成员变量

含义:默认按照类型自动分配,如果有则直接装配,若有多个则按照名称装配

1.使用@Value

1.直接注入数据内容

1.创建实体类

@Component
public class Student {@Value("中野二乃")private String name;@Value("18")private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

2.测试类测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Student student=(Student)applicationContext.getBean("student");System.out.println(student);}
}

2.注入动态获取数据内容

1.创建实体类

@Component
public class Student {@Value("${msg1}")private String name;@Value("${msg2}")private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

2.创建db.properties属性文件

msg1=elysia
msg2=20

3.在spring配置文件中使用db.properties文件

<!--注入数据-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>

4.测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Student student=(Student)applicationContext.getBean("student");System.out.println(student);}
}

2.使用@Autowired

默认按照类型自动分配,如果有则直接装配,若有多个则按照名称装配

1.默认按照类型自动分配

1.创建Dao层接口

public interface IUserDao {public void save();
}

2.创建Dao层实现类

@Repository
public class UserDaoImp implements IUserDao{public void save() {System.out.println("==dao的新增==");}
}

3.创建service层接口

public interface IUserService {public void save();
}

4.创建service层实现类

其中要调用dao层中定义的方法。

@Service
public class UserServiceImp implements IUserService{@AutowiredIUserDao userDao;public void save(){System.out.println("==业务的新增==");userDao.save();}
}

5.测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");IUserService service=(IUserService)applicationContext.getBean("userServiceImp");service.save();}
}

2.若有多个实现类则按照名称装配

1.创建第二个Dao接口实现类

@Repository
public class UserDaoImp2 implements IUserDao{public void save() {System.out.println("==dao的新增==");}
}

此时,一个接口有多个实现类,@Autowired会按照名称进行装配

2.抽象配置service层实现类

IUserDao接口定义的对象名必须与两个实现类之一的名字一致

@Service
public class UserServiceImp implements IUserService{@AutowiredIUserDao userDaoImp2;public void save(){System.out.println("==业务的新增==");userDaoImp2.save();}
}

3测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");IUserService service=(IUserService)applicationContext.getBean("userServiceImp");service.save();}
}

四、其他注解

@Primary

含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Qualifier(value="名称")

含义:按照名称装配

修饰:成员变量

注意:不能单独使用,必须与@Autowired联合使用

@Resource(name="名称")

含义:按照名称装配

修饰:成员变量

注意:单独使用

@Scope

含义:配置类的作用域

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Scope("prototype")

@Scope("singleton")

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)

@PostConstruct:初始化,修饰方法

@PreDestroy:销毁,修饰方法

1.@Primary

1.创建Dao层接口

public interface IUserDao {public void save();
}

2.创建Dao层实现类

@Repository
@Primary //此注解修饰的类被列为首选
public class UserDaoImp implements IUserDao{public void save() {System.out.println("==dao的新增==");}
}

3.创建service层接口

public interface IUserService {public void save();
}

4.创建service层实现类

@Service
public class UserServiceImp implements IUserService{@AutowiredIUserDao dao;public void save(){System.out.println("==业务的新增==");dao.save();}
}

5.测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");IUserService service=(IUserService)applicationContext.getBean("userServiceImp");service.save();}
}

2.@Qualifier与@Resource

1.dao接口、service接口与dao实现类与上题一致(注释掉dao实现类中@Primary注解)

2.修改service实现类,在@Autowired后添加@Qualifier

@Service
public class UserServiceImp implements IUserService{@Autowired@Qualifier(value = "userDaoImp2")IUserDao dao;public void save(){System.out.println("==业务的新增==");dao.save();}
}

3.修改service实现类,在@Autowired后添加@Qualifier=单独添加@Resource

@Service
public class UserServiceImp implements IUserService{@Resource(name = "userDaoImp2")IUserDao dao;public void save(){System.out.println("==业务的新增==");dao.save();}
}

3.@Scope

@Scope 的含义是:配置类的作用域

@Scope("prototype"):多例作用域,每次获取bean的时候,都创建一个新的bean实例

@Scope("singleton"):单例作用域,只有一个bean实例

1.给实体类设置作用域

@Component
@Scope(value = "prototype")
public class Student {@Value("${msg1}")private String name;@Value("${msg2}")private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

2.测试类测试

public class Test01
{public static void main( String[] args ) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Student student=(Student)applicationContext.getBean("student");System.out.println(student);Student student1=(Student)applicationContext.getBean("student");System.out.println(student == student1);}
}

如果@Scope(value = "singleton"),输出结果为true

4.@PostConstruct与@PreDestroy

@PostConstruct:初始化,修饰方法(在操作开始前执行)

@PreDestroy:销毁,修饰方法(在销毁时执行)

1.创建实体类并定义初始化、销毁方法

@Component
public class Teacher {@PostConstructpublic void doinit(){System.out.println("Teacher doinit");}@PreDestroypublic void doDestroy(){System.out.println("Teacher doDestroy");}
}

2.测试

public class Test01
{public static void main( String[] args ) {ClassPathXmlApplicationContext applicationContext1=new ClassPathXmlApplicationContext("applicationContext.xml");applicationContext1.close();}
}

http://www.dtcms.com/a/423827.html

相关文章:

  • Codex CLI 配置 Azure OpenAI GPT-5-codex 指南
  • SAP与阿里巴巴战略合作升级:四大核心云解决方案落地阿里云
  • 用网站模板做新网站网络营销实训报告
  • Spring Ai Alibaba开发指南
  • 建立什么网站赚钱淘宝交易指数换算工具
  • Sirius 开源免费的漏扫工具
  • 网站可以做被告嘛wordpress 设置404
  • flink api-datastream api-transformation算子
  • 自己做的网站如何发布什么公司可以做网站等级保护
  • 怎么做网站自动响应新手做淘宝客网站教程
  • 深度解析ZStack Cloud v5.4.0 LTS 基础架构三大核心突破
  • markitdown,面向AI输入的文档转换工具
  • C4D储卡器底部塑料壳建模之内部结构详解
  • 泉州网站搭建统计局网站集约化建设方案
  • Hanlp 配置
  • 网站开发实例拍拍网站源码
  • 湖北省建设厅信息网站模板建设网站
  • 计算机网络4
  • 【硬科普】什么是克尔效应
  • Zemax:初学者的混合模式
  • 烟台小学网站建设怎么通过网站打广告
  • 广州途道信息科技有限公司:以创新与责任,铸就教育机器人领军品牌
  • 汇世界迎全运 广州国际社区运动嘉年华举行,BOSMA博冠现场展示并分享与科技全运的故事
  • 电子商务网站建设域名广州黄埔做网站
  • 基于单片机的盲人智能水杯(论文+源码)
  • 广州网站设计皆赞乐云践新装修公司网站php源码
  • Java SE “语法”面试清单(含超通俗生活案例与深度理解)
  • 重庆网站建设哪里比较好呢深圳网站制作联系电话
  • [hcip 16]isis summary filter
  • Spring Boot 自动配置之 Spring transaction