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

南昌格网科技郑州专业seo哪家好

南昌格网科技,郑州专业seo哪家好,网站网站建设网页设计,火车头采集网站在 Spring 框架的开发中,依赖注入(DI)和控制反转(IoC)是核心设计思想。早期的 XML 配置方式虽然强大,但随着项目规模扩大,配置文件会变得冗长复杂。Spring 从 2.5 版本开始引入注解式开发&#…

在 Spring 框架的开发中,依赖注入(DI)和控制反转(IoC)是核心设计思想。早期的 XML 配置方式虽然强大,但随着项目规模扩大,配置文件会变得冗长复杂。Spring 从 2.5 版本开始引入注解式开发,通过简洁的注解实现 Bean 的定义和依赖注入,极大提升了开发效率。本文将系统讲解 Spring IoC 注解式开发的核心知识点,每个章节都配备完整的代码示例,帮助读者快速掌握实战技巧。​

一、基础注解:Bean 定义与扫描​

1. @Component及其衍生注解​

作用:标记类为 Spring 管理的 Bean,替代 XML 中的<bean>标签衍生注解:​

  • @Repository:标记数据访问层组件(DAO)​
  • @Service:标记业务逻辑层组件(Service)​
  • @Controller:标记表现层组件(Controller)​
  • @RestController:Spring Boot 中用于 RESTful 接口的组合注解(@Controller+@ResponseBody)​

代码示例:

// DAO层
@Repository
public class UserDao {public void save() {System.out.println("UserDao save");}
}// Service层
@Service
public class UserService {private UserDao userDao;// 依赖注入(后文详解)public UserService(UserDao userDao) {this.userDao = userDao;}public void register() {userDao.save();}
}// Web层
@RestController
@RequestMapping("/users")
public class UserController {private final UserService userService;// 构造函数注入public UserController(UserService userService) {this.userService = userService;}@GetMapping("/register")public String register() {userService.register();return "Register success";}
}

⑴. @RestController

此注解是 Spring 4.0 引入的,它是 @Controller 和 @ResponseBody 的组合注解。

  • @Controller:该注解属于 Spring MVC 框架,用于把一个类标记为 Spring MVC 的控制器。控制器负责处理客户端的请求,然后返回相应的视图或者数据。
  • @ResponseBody:这个注解会让控制器方法返回的对象直接以 HTTP 响应体的形式返回,而不是解析为视图名称。

把 @RestController 加在类上,意味着这个类是一个 RESTful 风格的控制器,它的方法返回的对象会被自动序列化为 JSON 或者 XML 格式的数据,然后作为 HTTP 响应体返回给客户端。

⑵. @RequestMapping("/users")

@RequestMapping 注解能够把 HTTP 请求映射到控制器的处理方法上。它可以在类级别或者方法级别使用。

  • 类级别:在类上使用 @RequestMapping("/users"),意味着这个控制器里所有处理方法的 URL 都会以 /users 作为前缀。
  • 方法级别:如果在方法上使用 @RequestMapping,则该方法的完整 URL 是类级别的 URL 前缀和方法级别的 URL 组合而成。

⑶. @GetMapping("/register")

@GetMapping 是 @RequestMapping 的一种快捷方式,专门用于处理 HTTP GET 请求。

  • 等价关系@GetMapping("/register") 等同于 @RequestMapping(method = RequestMethod.GET, value = "/register")
  • 作用:在控制器方法上使用 @GetMapping("/register"),表示这个方法会处理以 /users/register 为 URL 的 HTTP GET 请求(因为类上有 @RequestMapping("/users"))。

2. @ComponentScan​

作用:指定 Spring 扫描 Bean 的包路径,替代 XML 中的<context:component-scan>使用方式:​

  • XML 配置:<context:component-scan base-package="com.example"/>​
  • Java 配置类:@ComponentScan("com.example")或@ComponentScan(basePackages = "com.example")​

Java 配置类示例:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.example") // 扫描com.example包及其子包
public class AppConfig {
}

二、依赖注入注解:实现 Bean 关联​

1. @Autowired(按类型注入)​

作用:自动装配 Bean,默认按类型匹配支持场景:构造函数、字段、Setter 方法注意:Spring 4.3 + 后,构造函数注入可省略@Autowired(单构造函数场景)​

字段注入示例

@Service
public class UserService {@Autowired // 按类型注入UserDaoprivate UserDao userDao;// 使用userDao...
}

构造函数注入示例:

@Service
public class UserService {private final UserDao userDao;// 单构造函数时@Autowired可省略@Autowired public UserService(UserDao userDao) {this.userDao = userDao;}
}

2. @Qualifier(按名称注入)​

作用:与@Autowired配合,解决同类型多个 Bean 的注入歧义使用方式:通过@Qualifier("beanName")指定具体 Bean​

场景:当存在多个UserDao实现类时

// 定义两个实现类
@Repository("mysqlUserDao")
public class MysqlUserDao implements UserDao { /* ... */ }@Repository("oracleUserDao")
public class OracleUserDao implements UserDao { /* ... */ }// 注入时指定名称
@Service
public class UserService {@Autowired@Qualifier("mysqlUserDao") // 指定注入mysqlUserDaoprivate UserDao userDao;
}

3. @Resource(JSR-250 标准注解)​

作用:支持按名称(name属性)或类型(type属性)注入默认规则:优先按名称匹配,无匹配时按类型对比:Spring 原生@Autowired按类型,@Resource是 Java 标准注解​

示例:

@Service
public class UserService {@Resource(name = "mysqlUserDao") // 显式指定Bean名称private UserDao userDao;// 或 @Resource(type = MysqlUserDao.class) 按类型注入
}

4. @Value(注入基本类型 / 字符串)​

作用:注入配置文件中的属性值或直接量支持场景:注入String、基本类型、表达式(${})、SpEL(#{})​

示例:

// 注入配置文件中的值(application.properties)
@Value("${app.version}") // 读取配置项
private String appVersion;@Value("${server.port}")
private int port;// 注入直接量
@Value("Hello World")
private String welcomeMsg;// 注入SpEL表达式
@Value("#{T(java.lang.Math).random() * 100}") // 生成0-100的随机数
private double randomNum;

三、高级注解:Bean 定义与生命周期​

1. @Scope(Bean 作用域)​

作用:指定 Bean 的作用域,替代 XML 中的scope属性支持值:singleton(默认)、prototype、request、session、application(Servlet 环境)​

示例:

@Service
@Scope("prototype") // 每次获取创建新实例
public class UserService { /* ... */ }

2. 生命周期注解​

@PostConstruct(初始化方法)​

作用:标记 Bean 初始化完成后执行的方法,替代init-method要求:方法无参数,返回值为void,最多一个

@Service
public class UserService {@PostConstructpublic void init() {System.out.println("UserService initialized");}
}

@PreDestroy(销毁前方法)​

作用:标记 Bean 销毁前执行的方法,替代destroy-method适用场景:释放资源(如关闭数据库连接)

@Service
public class UserService {@PreDestroypublic void destroy() {System.out.println("UserService destroyed");}
}

3. Java 配置类注解(替代 XML 配置)​

@Configuration​

作用:标记类为配置类,替代 XML 根标签<beans>​

@Bean​

作用:定义 Bean,替代 XML 中的<bean>标签​

@Import​

作用:导入其他配置类,替代 XML 中的<import>​

Java 配置类示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;@Configuration
@Import(DataSourceConfig.class) // 导入其他配置类
public class AppConfig {@Bean("myBean") // 定义名为myBean的Beanpublic MyBean createMyBean() {return new MyBean();}
}// 独立配置类
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {// 配置数据源...return new HikariDataSource();}
}

五、注解开发最佳实践​

1.分层使用注解:​

  • @Controller/@RestController用于 Web 层​
  • @Service用于业务层​
  • @Repository用于数据访问层​
  • 避免在工具类 / 实体类中使用组件注解​

2.依赖注入策略:​

  • 构造函数注入:用于注入必需依赖(建议使用final修饰)​
  • Setter 方法注入:用于可选依赖​
  • 字段注入:简化代码(但不利于单元测试,谨慎使用)​

3.混合配置:​

  • 推荐使用 Java 配置类(@Configuration+@Bean)替代 XML​
  • 遗留项目可混合使用注解和 XML,但建议逐步迁移至全注解​

4.处理循环依赖:​

  • 构造函数注入会导致循环依赖报错,改用 Setter 注入或@Lazy注解​
  • Spring 默认解决单例 Bean 的 Setter 注入循环依赖(通过提前暴露代理对象)​

六、总结​

Spring 注解式开发通过简洁的语法实现了强大的 IoC 功能,显著减少了样板代码,让开发者更专注于业务逻辑。本文覆盖了从基础 Bean 定义到高级生命周期管理的核心注解,每个知识点均配备可运行的代码示例。实际项目中,建议结合 Spring Boot 进一步简化配置(自动扫描、默认配置),并根据团队技术栈选择 XML、Java 配置类或纯注解的开发方式。​

掌握这些注解后,开发者可以更高效地构建松耦合的企业级应用,同时利用 Spring 生态(如 Spring MVC、Spring Data)实现快速开发。后续可以深入学习 Spring Boot 的自动配置原理,进一步提升微服务开发能力。

http://www.cadmedia.cn/news/8483.html

相关文章:

  • net源码的网站建设步骤如何做到精准客户推广
  • 甘肃省省建设厅网站天眼查企业查询
  • 外贸网站建设 评价广州日新增51万人
  • 湖北建设工程信息网官网青岛网站优化公司
  • 专业网站建设价格大全by72777最新域名查询
  • 企业自助网站建设大数据培训课程
  • 网站建设服务杭州seo优化工具
  • 深圳专业的网站制作公司营销推广方式
  • 多元 集团 网站建设方案腾讯企点下载
  • 有限公司怎么注册公司杭州网站优化服务
  • 旅游网站毕业论文网站提交入口链接
  • 网站建设与规划专业关键词分析工具
  • 网站设计难吗怎样让自己的网站排名靠前
  • 网站建设的企业百度爱采购平台登录
  • 南京网站建设案例住房和城乡建设部官网
  • 邯郸又出现一例上海优化外包
  • 直播网站建设需要多少钱网络推广专员是做什么的
  • 河南住房和城乡建设厅网站特种软文写作技巧
  • 免费网站推广服务sem工作原理
  • 物流网络平台seo百科大全
  • 山东省建设部网站网页模板素材
  • 手机网站制作 尺寸qq推广平台
  • 代办公司注册哪家好上海优化公司排行榜
  • 什么是自建站小学四年级摘抄新闻
  • 网站建设若干意见网上销售有哪些方法
  • 软件开发软件下载南宁seo咨询
  • dw网站制作的一般流程想要导航推广网页怎么做
  • 成都网站建设 培训站长素材网站官网
  • 网站建设未来关键词排名查询工具免费
  • 做公章网站深圳优化公司找高粱seo服务