组键注册注解
组件注册步骤总结
条件注解
演示示例
属性绑定注解
@ConfigurationProperties进行绑定
@EnableConfigurationProperties进行绑定
其他常用注解
@EnableAutoConfiguration
@ComponentScan
@RequestMapping
@GetMapping
@PostMapping
@Autowired
@Resource
@Service
@Controller
@Repository
@ResponseBody
@RequestParam
@PathVariable
@RequestHeader
@CookieValue
@RestController
@Value
@PropertySource
组键注册注解
示例:创建两个bean对象
创建config包下的配置类
@Configuration:声明该类为配置类
@Bean:注册组件注解,默认容器中组件的名字为注册的方法名,也可以@Bean("自定义名称")的方式
@Configuration也可以使用@SpringBootConfiguration代替,两者区别不大。前者代表是通用配置类,后者代表为springboot配置类。主要用来区分实际项目的类型。
@Component:常用将对象注册到容器中
@Configuration //告诉springboot这是一个配置类
public class AppConfig {@Bean //Bean注册public User user(){var user = new User(); //创建实例对象user.setId(1L);user.setName("张三");return user;}
}
到测试类中测试
@SpringBootApplication
public class Springboot302Application {public static void main(String[] args) {//定义为ioc变量var ioc = SpringApplication.run(Springboot302Application.class, args);//打印输出全部注册的组件名称for (String name : ioc.getBeanDefinitionNames()) {System.out.println(name);}}
}
运行查user对象已成功注册(组件默认是单实例)
如果需要组件注册为多实例
@Scope("prototype"):调整组件范围,注册组件为多实例,每次获取都会重新创建对象
@Configuration //告诉springboot这是一个配置类
public class AppConfig {@Scope("prototype")@Bean //Bean注册public User user(){var user = new User(); //创建实例对象user.setId(1L);user.setName("张三");return user;}
}
导入第三方包的类注册到ioc容器中
@Import: 给容器中放指定类型的组件,组件的名字默认是全类名
先导入maven依赖
准备将要导入的类对象
方法1:可以在配置类中使用@Bean注册到容器中
方法2: 在配置类使用@Import将类导入到ioc容器中
组件注册步骤总结
1、@Configuration 编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean
3、或使用@Import 导入第三方的组件
条件注解
如果注解指定的条件成立,则触发指定行为,通常都是@ConditionalOnXxx的形式
放在类级别,如果注解判断生效,则整个配置类才生效
放在方法级别,单独对这个方法进行注解判断。
@ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
@ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
@ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
@ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为
@ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值
演示示例
- 如果存在
FastsqlException
这个类,给容器中放一个Cat
组件,名cat01, - 否则,就给容器中放一个
Dog
组件,名dog01 - 如果系统中有
dog01
这个组件,就给容器中放一个 User组件,名zhangsan - 否则,就放一个User,名叫lisi
属性绑定注解
将容器中任意组件(Bean)的属性值和配置文件的配置项的值进行绑定
绑定步骤:
- 1、给容器中注册组件(@Component、@Bean)
- 2、使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定
@ConfigurationProperties: 声明组件的属性和配置文件哪些前缀开始项进行绑定。
@EnableConfigurationProperties:快速注册注解,SpringBoot默认只扫描自己主程序所在的包。如果导入第三方包,即使组件上标注了 @Component、@ConfigurationProperties 注解,也没用。因为组件都扫描不进来,此时使用@EnableConfigurationProperties注解就可以快速进行属性绑定并把组件注册进容器。
@ConfigurationProperties进行绑定
创建Dog对象类
public class Dog {private long id;private String name;private int age;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
将对象属性值写到application.properties配置文件中
dog.id=1
dog.name=柯基
dog.age=2
在实体类中进行绑定注册
@ConfigurationProperties(prefix = "dog") //声明绑定
@Component //注册到容器中
在主测试程序中测试查看绑定
public static void main(String[] args) {//定义为ioc变量var ioc = SpringApplication.run(Springboot302Application.class, args);Dog dog = ioc.getBean(Dog.class);System.out.println("dog"+ dog);}
运行查看已成功绑定
这里出现问号的原因是因为中文编码问题可在设置里设置
在设置中如果是使用的语言为英文就搜索“file enc”,语言为中文就搜索“文件编码”
在重新写一下文件重新运行已成功显示
也可以放在配置类的方法上进行注册绑定
@EnableConfigurationProperties进行绑定
还是使用Dog类为例对象值写到application.properties配置文件中
类中只声明绑定,不注册到容器中
在配置类中使用@ConfigurationProperties注解
开启Dog组件的属性绑定,默认会把这个组件自己放到容器中
@EnableConfigurationProperties(Dog.class)
运行主测试程序中的代码查看绑定成功
其他常用注解
@EnableAutoConfiguration
它的作用是开启Spring Boot的自动配置功能。在Spring Boot应用中,添加这个注解,就可以让Spring Boot自动根据项目中的依赖关系来进行自动配置,无需手动编写大量的配置文件。
@SpringBootApplication
@EnableAutoConfiguration
public class Application {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
@ComponentScan
用于自动扫描指定包及其子包下的所有类
,并将其注册为Spring容器中的Bean
。该注解可以用在@Configuration
注解的类中,也可以用在普通的@Component
注解的类中。
@Configuration
@ComponentScan(basePackages = "com.springboot")
public class AppConfig {// 配置其他Bean
}
@RequestMapping
用于映射 HTTP 请求路径和方法到控制器的方法或类上,也可以用于指定请求参数
、请求头
、请求体
等信息。
@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping(method = RequestMethod.GET)public String sayHello() {return "hello";}
}
@GetMapping
用于将HTTP GET请求映射到特定的处理程序方法上,
它可以用于处理简单的HTTP GET请求,也可以用于处理带有路径变量的请求。
@RestController
public class MyController {@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}
@PostMapping
用于将HTTP POST请求映射到特定的处理方法上,
它是@RequestMapping注解的一个变体,用于简化处理POST请求的代码。
@RestController
public class UserController {@PostMappingpublic User createUser(@RequestBody User user) {// 处理创建用户的逻辑return user;}
}
@Autowired
是Spring框架中的一个注解,用于自动装配Bean。它可以自动将一个Bean注入到另一个Bean中,无需手动编写代码进行依赖注入,Spring会根据类型进行自动装配,如果有多个类型相同的Bean。
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic User getUserById(int id) {return userDao.getUserById(id);}
}@Repository
public class UserDaoImpl implements UserDao {@Overridepublic User getUserById(int id) {// 查询数据库获取用户信息return user;}
}
@Resource
是Java EE标准中提供的一种注入依赖对象的方式,它可以自动装配一个指定的bean
,从而避免手动实例化对象的繁琐
和容易出错
,指定要注入的bean的名称或类型
public class MyClass {@Resource(name = "myBean")private MyBean myBean;@Resourceprivate OtherBean otherBean;
}
@Service
用于标识一个类为服务层组件。在Spring中,服务层组件通常用于处理业务逻辑,调用数据访问层组件进行数据操作,并将处理结果返回给控制层组件。 该注解可以让Spring自动扫描并创建服务层组件的实例,同时也可以通过依赖注入的方式将服务层组件注入到其他组件中使用。
@Service
public class UserServiceImpl implements UserService {// ...
}
@Controller
用于标识一个类是控制器(Controller)。 控制器是处理用户请求的组件,它接收用户请求,调用业务逻辑处理,最终返回视图给用户。
@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping("/world")public String helloWorld() {return "helloWorld";}
}
@Repository
用于标识一个类为数据访问层(DAO)的组件,通常与@Autowired注解一起使用,实现依赖注入。还可以指定一个value属性,用于指定Bean的名称。
@Repository
public class UserDaoImpl implements UserDao {// ...
}@Repository("userDao")
public class UserDaoImpl implements UserDao {// ...
}
@ResponseBody
是Spring MVC框架中的一个注解,用于将Controller方法返回的对象转换为指定格式的数据,比如JSON、XML等格式,然后将其写入HTTP响应中。
@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.createUser(user);return ResponseEntity.ok(savedUser);}@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {User updatedUser = userService.updateUser(id, user);if (updatedUser == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(updatedUser);}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {boolean deleted = userService.deleteUser(id);if (!deleted) {return ResponseEntity.notFound().build();}return ResponseEntity.noContent().build();}
}
@RequestParam
是Spring MVC框架中用于绑定请求参数的注解,它可以将请求参数绑定到方法的参数上。
以下属性:
value:请求参数的名称。
required:是否必须,默认为true。
defaultValue:请求参数的默认值。
在这里插入代码片@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/info")public String getUserInfo(@RequestParam("id") Long userId, Model model) {// 根据用户ID查询用户信息User user = userService.getUserById(userId);// 将用户信息添加到模型中model.addAttribute("user", user);// 返回用户信息页面return "user/info";}
}
@PathVariable
是Spring MVC框架中用于获取请求路径中的参数值的注解,将请求路径中的占位符参数绑定到方法的参数上,从而方便地获取请求参数。
@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {// 根据id查询用户信息User user = userService.getUserById(id);return user;}
}
@RequestHeader
用于获取HTTP请求头中的值,可以用在Controller的方法参数上,表示将请求头中指定名称的值注入到方法参数中。
@GetMapping("/user-agent")
public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {return "User-Agent: " + userAgent;
}
@CookieValue
是Spring MVC中的一个注解,用于将指定的cookie值绑定到方法的参数上。需要指定两个参数,分别是cookie的名称和默认值。如果指定的cookie不存在,则使用默认值。
@GetMapping("/user")
public String getUserInfo(@CookieValue(value = "token", defaultValue = "") String token) {// do something with tokenreturn "user";
}
@RestController
是@Controller和@ResponseBody的结合体,用于标记一个类是 RESTful 风格的控制器,它的方法返回的数据会直接写入 HTTP 响应体中。
@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
@Value
可以用来注入外部配置文件或者动态生成的值,例如数据库连接地址、用户名密码。
public class MyClass {@Value("${database.url}")private String dbUrl;// 或者@Value("#{systemProperties['user.home']}")private String userHome;
}
@PropertySource
是Spring框架中的一个注解,用于指定一个或多个属性文件的位置,以便在应用程序中使用这些属性,在Spring应用程序中轻松地管理属性文件
//application.properties
db.username=root
db.password=123456
db.url=jdbc:mysql://localhost:3306/test
//配置类
@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {// ...
}
@Service
public class UserServiceImpl implements UserService {@Value("${db.username}")private String username;@Value("${db.password}")private String password;@Value("${db.url}")private String url;// ...
}