AlexKorablev.ru
Александр Кораблев о разработке ПО, ИТ-индустрии и Python.
Переезд с Python на Java. Первые впечатления
Опубликовано 26 August 2016 в Java
Буквально неделю назад я добавил Java в свой рабочий стек технологий: мы начали делать новый проект с использованием Java Spring Framework. Для меня это интересный вызов. Я никогда раньше не использовал Java, кроме как для маленьких домашних проектиков. Вот мои самые первые впечатления о «лютом энтерпрайзе».
Я не хочу сравнивать Python и Java, как языки программирования. Очевидно, что в Java есть статическая типизация, а в Python нет. Очевидно, что Java более многословна, а Python более компактен. Все это не так интересно. Гораздо интереснее сравнить окружение языков, требуемый ими подход к программированию.
Во первых, Java намного требовательнее к качеству архитектуры и дизайна софта. Питон прощает многие недочеты в проектировании, прежде чем код превращается в нечитаемую и неподдерживаемую кашу. С другой стороны, Java теряет читаемость с огромной скоростью, даже с небольшими просчетами в архитектуре.
Во вторых, Java энтерпрайзного уровня сильно отличается от Java для, к примеру, геймдева или мобильной разработки. Язык-то один и тот же, но подходы к разработке и фреймворки отличаются сильно. Они много больше и сложнее. Я даже стал думать, что Django — это микрофреймворк.
В третьих, огорошило огромное количество магии в Spring Framework. Начать в нем было очень сложно, по сравнению со стартом с любым фреймворком на питоне, который я видел. Мне повезло, у нас в команде, кто занимается этим проектом, только я не имею опыта разработки на спринге. Так что у меня хотя бы есть у кого спросить.
Конечно есть области, где Java делает Python. К примеру, Java гораздо проще деплоить. В java есть такие замечательные тулзы как Maven или Gradle. В целом острой необходимости в такого рода инструментах в питоне нет, пока не надо готовить сборки и пакеты к регулярному деплою.
В заключение хочу сказать, что Java не лучше и не хуже питона. Это другой язык, который требует другого подхода к программированию и других привычек. Вот несколько моих наблюдений:
- Меняйте подход к чтению кода. В Java читать тело метода менее важно, чем в Python: заголовок намного информативнее по сравнению с питоном. Я не говорю, что реализация метода не важна. Просто в нее можно заглядывать гораздо реже, чем это требуется в питоне.
- Аннотации в Java не равны декораторам в питоне. Они похожи по синтаксису, но работают по разному.
- Java заставит вас интенсивно использовать IDE. Расслабьтесь и получайте удовольствие. Это нормально.
- Читайте книги. «Effective Java» должна быть в списке трех следующих книг для чтения. Фреймворки Java типа Spring более сложные и трудные для понимания, чем фреймворки для Python. К счастью, для Java гораздо больше качественных обучающих материалов.
Я не 100% Java разработчик. Примерно половину времени я все еще программирую на Python. Так что в блоге я буду публиковать посты и о Python, и о Java.
Welcome to Spring Python’s documentation!¶
Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.
- 1. Overview
- 1.1. Key Features
- 1.2. What Spring Python is NOT
- 1.3. Support
- 1.3.1. Spring Python 1.1 book
- 1.3.2. Forums and Email
- 1.3.3. IRC
- 1.7.1. How to become a team member
- 2.1. New Features
- 3.1. External dependencies
- 3.2. Container
- 3.2.1. ObjectContainer vs. ApplicationContext
- 3.2.2. Scope of Objects / Lazy Initialization
- 3.2.3. Configuration
- 3.2.3.1. XMLConfig — Spring Python’s native XML format
- 3.2.3.1.1. Referenced Objects
- 3.2.3.1.2. Inner Objects
- 3.2.3.1.3. Collections
- 3.2.3.1.4. Constructors
- 3.2.3.1.5. Values
- 3.2.3.1.6. XMLConfig and basic Python types
- 3.2.3.1.7. Object definition inheritance
- 3.2.3.2.1. Referenced Objects
- 3.2.3.2.2. Inner Objects
- 3.2.3.2.3. Collections
- 3.2.3.2.4. Support for Python builtin types and mappings of other types onto YAML syntax
- 3.2.3.2.5. Constructors
- 3.2.3.2.6. Object definition inheritance
- 3.2.3.3.1. Object definition inheritance
- 3.2.3.4.1. PyContainerConfig — Spring Python’s original XML format
- 3.2.3.4.2. SpringJavaConfig
- 3.2.3.5.1. Object Factories
- 3.2.3.5.2. Testable Code
- 3.2.3.5.3. Mixing Configuration Modes
- 3.2.3.5.4. Querying and modifying the ApplicationContext in runtime
- 4.1. External dependencies
- 4.2. Interceptors
- 4.3. Proxy Factory Objects
- 4.4. Pointcuts
- 4.5. Interceptor Chain
- 4.6. Coding AOP with Pure Python
- 5.1. DatabaseTemplate
- 5.1.1. External dependencies
- 5.1.2. Traditional Database Query
- 5.1.3. Database Template
- 5.1.4. Mapping rows into objects using convention over configuration
- 5.1.5. Mapping rows into dictionaries
- 5.1.6. What is a Connection Factory?
- 5.1.7. Creating/altering tables, databases, and other DDL
- 5.1.8. SQL Injection Attacks
- 5.1.9. Have you used Spring Framework’s JdbcTemplate?
- 5.1.10. Notes on using SQLServerConnectionFactory
- 6.1. External dependencies
- 6.2. Solutions requiring transactions
- 6.3. TransactionTemplate
- 6.4. @transactional
- 6.4.1. PROPAGATION_REQUIRED .
- 7.1. External dependencies
- 7.2. Shared Objects
- 7.3. Authentication
- 7.3.1. AuthenticationProviders
- 7.3.1.1. DaoAuthenticationProvider
- 7.3.1.2. LDAP Authentication Provider
- 7.3.1.3. Future AuthenticationProviders
- 8.1. External dependencies
- 8.2. Remoting with PYRO (Python Remote Objects)
- 8.2.1. Decoupling a simple service, to setup for remoting
- 8.2.2. Exporting a Spring Service Using Inversion Of Control
- 8.2.2.1. Hostname/Port overrides
- 8.5.1. Encrypted connection only
- 8.5.2. Server requires the client to have a certificate
- 8.5.3. Server requires the client to have a certificate and checks its fields
- 8.5.4. Sample keys and certificates
- 8.5.5. Configuration
- 8.5.5.1. SSLServer
- 8.5.5.2. SSLClient
- 8.5.6.1. SSLServer
- 8.5.6.2. SSLClient
- 9.1. Introduction
- 9.2. Dependencies
- 9.3. Quick start
- 9.3.1. Sending
- 9.3.2. Receiving
- 9.4.1. WebSphereMQConnectionFactory
- 9.5.1. Sending
- 9.5.2. Receiving
- 9.5.3. Dynamic queues
- 9.5.4. Message converters
- 10.1. Introduction
- 10.2. Coily — Spring Python’s command-line tool
- 10.2.1. Commands
- 10.3.1. External dependencies
- 10.3.2. gen-cherrypy-app
- 10.4.1. Architecture of a plugin
- 10.4.2. Case Study — gen-cherrypy-app plugin
- 10.4.2.1. Source Code
- 10.4.2.2. Deconstructing the factory
- 10.4.2.3. Summary
- 11.1. PetClinic
- 11.1.1. How to run
- 11.3.1. Why write a bot?
- 11.3.2. IRC Library
- 11.3.2.1. Articles
- 11.3.3.1. IRC Bot
- 11.3.3.2. Web App
- 11.3.3.3. Putting it all together
- 11.3.3.3.1. IRC Bot’s application context
- 11.3.3.3.2. Web App’s application context
- 11.3.3.3.3. Main runner
Основы Spring Beans для начинающих
Spring Framework — это мощный инструмент, который может быть сложным для понимания новичками, особенно когда речь идет о таком ключевом понятии, как Spring Beans.
Всякий раз, когда встречается упоминание о Spring Beans, появляются вопросы: что это такое, как они используются и какое отношение они имеют к Dependency Injection?
Что такое Spring Beans?
Spring Beans — это просто объекты, которые формируются и управляются Spring IoC (Inversion of Control) контейнером. В контексте Spring, Bean — это объект, который подготовлен для использования и можно получить на запрос. По сути, это объекты, которые заполняются и конфигурируются контейнером Spring.
Как они используются?
Spring Beans могут использоваться в любом месте приложения. Когда Bean создается, он готов к использованию и может быть внедрен в любой другой Bean или компонент приложения. Это делается через механизм Dependency Injection.
Dependency Injection и Spring Beans
Dependency Injection — это процесс, при котором Spring контейнер «внедряет» объекты-зависимости в другие объекты. Это ключевой аспект в работе Spring, который позволяет достичь слабой связанности и высокой модульности в приложениях.
Представьте, что у вас есть объект Car, которому нужен объект Engine для работы. Вместо того, чтобы самому создавать объект Engine внутри Car, Spring контейнер создаст объект Engine и «внедрит» его в Car автоматически. Объекты Engine и Car в этом случае будут являться Spring Beans.
Преимущество этого в том, что код становится более чистым, модульным и легко тестируемым, поскольку зависимости между объектами управляются автоматически.
В заключении, Spring Beans — это ключевая концепция в Spring Framework, которая позволяет легко управлять и конфигурировать объекты в приложении. Они играют важную роль в реализации Dependency Injection и создании модульных, тестируемых приложений.
Python-сообщество
- Начало
- » Python для экспертов
- » Spring Python — что это ?
#1 Ноя. 21, 2010 15:17:37
uhbif19 От: Зарегистрирован: 2010-05-22 Сообщения: 56 Репутация: 0 Профиль Отправить e-mail
Spring Python — что это ?
Spring часто вроде юзают в жабе и очень радуются. Недавно обнаружил его наличие в питоне. Интересно понять зачем оно нужно.
Кто нибудь юзал ? На английском даже книга есть. На русском даже обзора нету.
Насколько я понял, главная фича — аспектно-ориентированное программирование. Немного посмотрел статью IBM и не особо вьехал. Узнал только зачем оно нужно (: Статьи на эту тему есть нормальные ?
#2 Ноя. 22, 2010 11:06:18
regall От: Киев Зарегистрирован: 2008-07-17 Сообщения: 1583 Репутация: 3 Профиль Отправить e-mail
Spring Python — что это ?
uhbif19, для этого в мире Python люди написали хороший Zope3. Если веб не нужен — пользуетесь core-модулями ZCA:
zope.interface
zope.component
zope.event
zope.securityи еще какие вам там нужны…
#3 Ноя. 22, 2010 11:07:48
regall От: Киев Зарегистрирован: 2008-07-17 Сообщения: 1583 Репутация: 3 Профиль Отправить e-mail
Spring Python — что это ?
B вдогонку — вот шаровая книга по ZCA или как использовать Zope без веба. Очень доходчиво и на простых примерах.
- 7.3.1. AuthenticationProviders
- 3.2.3.1. XMLConfig — Spring Python’s native XML format