IOC操作Bean管理(基于注解方式)

本文详细介绍了Spring框架中四种注解的使用,包括@Component、@Service、@Controller和@Repository,以及如何通过注解实现对象创建、属性注入和完全注解开发。通过实例演示,让读者理解注解在简化配置和提高开发效率中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、什么是注解?

二、Spring针对Bean管理中创建对象提供了四种注解

三、基于注解方式实现对象创建

        1、引入依赖

        2、开启组件扫描

        3、创建类,在类上面添加创建对象注解

四、基于注解方式实现属性注入(四种注解)

五、完全注解开发

六、测试结果

总结


一、什么是注解?

        1)注解是代码的一种特殊标记,格式:@注解名称(属性名称 = 属性值,属性名称 = 属性值,...)

        2)使用注解,注解可以作用在类上面、方法上面、属性上面

        3)使用注解的目的:简化XML配置,更加简洁

二、Spring针对Bean管理中创建对象提供了四种注解

放在类上面

        1)@Component

        2)@Service

        3)@Controller

        4)@Repository

注意:上面四种注解的功能是完全一样的,都可以用来创建bean实例,在开发中根据类的作用来选择即可。

三、基于注解方式实现对象创建

        1、引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.3.16</version>
        </dependency>
    </dependencies>

        2、开启组件扫描

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启组件扫描
        如果扫描多个包,多个包之间只用逗号个号
    -->
    <context:component-scan base-package="bean"></context:component-scan>

</beans>

        3、创建类,在类上面添加创建对象注解

代码如下例:

@Component(value = "user")
public class User {

    @Value(value = "小h")
    private String name;

    @Value(value = "20")
    private Integer age;

    @Autowired
    @Qualifier(value = "school")
    private School school;
@Component
public class School {

    public void add(){
        System.out.println("school add 方法。。。。");
    }

}

其中value的属性值可以省略不写(默认是类名称,首字母小写) 

四、基于注解方式实现属性注入(四种注解)

        1)@Autowired:根据属性的类型进行自动装配

        2)@Qualifier:根据名称进行注入,要和上面的@Autowired一起搭配使用

        3)@Resource:可以根据类型注入,也可以根据名称注入

        4)@Value:用于注入普通类型属性

具体使用如下例:

public class User {
    
    @Value(value = "小h")
    private String name;
    
    @Value(value = "20")
    private Integer age;
    
    @Autowired//根据属性类型
    @Qualifier(value = "school")//根据名称
    private School school;

    public void add() {
        System.out.println("user add 方法。。。。。");
    }

五、完全注解开发

完全注解开发就是创建一个配置类用来代替XML配置文件

如下,创建一个配置类:

@Configuration   //作为配置类的一个注解,代替XML配置文件
@ComponentScan(basePackages = {"bean"})   //开启注解扫描,里面的包是一个String数组类型,可以有多个
public class SpringConfig {
}

六、测试结果

@Test
    public void test(){
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        User user = context.getBean("user", User.class);
        System.out.println(user.getName());
        System.out.println(user.getSchool());
        user.getSchool().add();
    }

总结

不得不说,使用完全注解开发比XML配置文件真的要简洁很多!

欢迎指正和交流哦!

### 使用 Spring IOC 管理数据库 Bean 的方法和最佳实践 #### 配置数据源 为了使应用程序能够连接到数据库,首先需要配置一个 `DataSource`。这可以通过 XML 或者基于注解方式实现。 ```xml <!-- 数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> ``` 或者采用更现代的 Java Config 方式: ```java @Configuration public class DataSourceConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); return ds; } } ``` 上述代码展示了如何通过编程方式定义并初始化一个名为 `dataSource` 的 Bean[^1]。 #### 创建 DAO 层接口及其实现类 DAO (Data Access Object) 是访问持久化存储单元的主要入口点之一。通常会有一个接口声明 CRUD 方法,并由具体的实现类提供这些方法的具体逻辑。 ```java // UserDao.java public interface UserDao { void insert(User user); } // UserDaoImpl.java @Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void insert(User user) { String sql = "INSERT INTO users(name, age) VALUES (?, ?)"; jdbcTemplate.update(sql, user.getName(), user.getAge()); } } ``` 这里使用了 `@Repository` 注解标记该类为 Repository 组件,自动处理异常转换;而 `JdbcTemplate` 则提供了便捷的操作 JDBC API 的工具[^2]。 #### Service 层调用 DAO 进行业务逻辑封装 Service 类负责业务流程控制和服务协调工作,在此层次中可以组合多个 Dao 来完成复杂的事务操作。 ```java @Service @Transactional public class UserService { @Autowired private UserDao userDao; public void registerUser(String name, Integer age){ User newUser = new User(name, age); userDao.insert(newUser); } } ``` 在这个例子中,`@Transactional` 用来指定当前方法应该在一个事务范围内运行,确保所有涉及的数据修改要么全部成功提交,要么回滚失败的部分[^3]。 #### 控制器层接收请求并向服务发送指令 最后一步是在 Web 应用程序中的控制器部分接受 HTTP 请求并将它们转发给相应的 service 对象来进行实际的工作。 ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @PostMapping("/register") public ResponseEntity<String> register(@RequestParam("name") String name, @RequestParam("age") int age) { try{ userService.registerUser(name, age); return ResponseEntity.ok("Register Success"); }catch(Exception e){ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } } } ``` 以上就是利用 Spring IoC 容器管理操作数据库 Beans 的基本模式以及一些推荐的最佳做法。在整个过程中,依赖注入使得各组件之间的耦合度大大降低,提高了系统的灵活性与可维护性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java路上探索的小H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值